我有两个SelectOneMenu。第一个包含国家/地区列表,我希望第二个包含根据第一个下拉列表中选择的国家/地区列出的城市列表。为此,我按以下步骤操作: 首先,在我的列表中包含国家/地区列表,我会听取这样的价值变化:
<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>
然后在我的支持bean中,对于范围应用程序,我这样做是为了能够执行每次负责的方法以根据国家检索城市列表:
public void getNamesCityByCountry(ValueChangeEvent e) {
String idselect = e.getNewValue().toString();
Integer value = new Integer(idselect);
this.msApplication.setListCity(this.msApplication.getIMetierLocal().getAllCity(value));
}
现在在facelet中,我这样做:
<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>
在我的支持bean中:
public List<City> getAllCityByNameCountry() {
return this.msApplication.getListCity();
}
我想每次运行上面的方法(getAllCityByNameCountry()),只根据国家/地区列出城市列表。