salut a vous. j'ai deux deux SelectOneMenu. le premier contient la liste des pays et je voudrai que le second contient la liste de villes selon le pays choisi dans la première liste déroulante. pour ce faire, je procède comme suit :
tout d'abord, dans ma liste contenant la liste des pays, j’écoute tout changement de valeur comme-ci :
ensuite dans mon backing bean, ayant pour portée Application, je fais ceci pour pouvoir exécuter a chaque fois la méthode chargée de récupérer la liste des villes en fonction du pays :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <div class="form-group"> <label class="col-lg-3 control-label" for="#{val['inscription.country']}"><h:outputText value="#{val['inscription.country']}"/><span class="required">*</span></label> <div class="col-lg-5"> <h:selectOneMenu id="#{val['inscription.country']}" required="true" requiredMessage="#{val['requiredcountry']}" value="#{manageuser.country}" styleClass="form-control" validator="#{manageuser.validateCountry}" onchange="onsubmit()" valueChangeListener="#{initapp.getNamesCityByCountry}"> <f:selectItem itemLabel="-- Choisir un Pays --" class="bold"/> <f:selectItems value="#{initapp.allCountry}" var="country" itemLabel="#{country.namecountry_fr_fr}" itemValue="#{country.idcountry}"/> <f:ajax event="blur" render="countryMessage" /> </h:selectOneMenu> </div> <h:message id="countryMessage" for="#{val['inscription.country']}" errorClass="erreur" /><br /> </div>
et maintenant dans la facelet, je fais ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void getNamesCityByCountry(ValueChangeEvent e) { String idselect = e.getNewValue().toString(); Integer value = new Integer(idselect); this.msApplication.setListCity(this.msApplication.getIMetierLocal().getAllCity(value)); }
dans mon backing bean:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <div class="form-group"> <label class="col-lg-3 control-label" for="#{val['inscription.city']}"><h:outputText value="#{val['inscription.city']}"/> <span class="required">*</span></label> <div class="col-lg-5"> <f:selectItem itemLabel="-- Choisir une Ville --" class="bold"/> <h:selectOneMenu id="#{val['inscription.city']}" required="true" requiredMessage="#{valinitapp['requiredcity']}" value="#{manageuser.city}" styleClass="form-control" validator="#{manageuser.validateCity}" > <f:selectItem itemLabel="-- Choisir une Ville --" class="bold"/> <f:selectItems value="#{initapp.allCityByNameCountry}" var="city" itemLabel="#{city.namecity}" itemValue="#{city.idcity}"/> <f:ajax event="blur" render="cityMessage" /> </h:selectOneMenu> </div> <h:message id="cityMessage" for="#{val['inscription.city']}" errorClass="erreur" /><br /> </div>
je voudrai exécuter la méthode (getAllCityByNameCountry()) ci-dessus a chaque fois pour n'avoir que la liste des villes en fonction des pays.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public List<City> getAllCityByNameCountry() { return this.msApplication.getListCity(); }
Partager