我正在尝试制作 4 个依赖/级联选择组件。在这个问题中,选择组件恰好是 a <h:selectOneMenu>
,但这当然适用于从UISelectOne
/UISelectMany
超类扩展的任何其他类型的选择组件,例如<h:selectManyCheckbox>
或 PrimeFaces<p:selectCheckboxMenu>
等<p:selectManyMenu>
。
当用户从第一个菜单中选择一个项目时,第二个菜单将显示依赖数据,当用户从第二个菜单中选择项目时,第三个菜单将显示依赖数据,依此类推。
用户只会在第一个菜单上看到项目,而其他项目将是空白的。如果他在第一个菜单上选择一个项目,第二个将显示数据,但第三个和第四个将保持空白,依此类推。用户最终必须从所有 4 个菜单中选择条目。
<h:selectOneMenu id="first" value="#{nodes.selectState}">
<f:selectItems value="#{nodes.stateList}"/>
<f:ajax render="second">
</h:selectOneMenu>
<h:selectOneMenu id="second" value="#{nodes.selectCity}">
<f:selectItems value="#{nodes.cityList}"/>
<f:ajax render="third">
</h:selectOneMenu>
<h:selectOneMenu id="third" value="#{nodes.selectRegion}">
<f:selectItems value="#{nodes.regionList}"/>
<f:ajax render="fourth">
</h:selectOneMenu>
<h:selectOneMenu id="fourth" value="#{nodes.selectStation}">
<f:selectItems value="#{nodes.stationList}"/>
</h:selectOneMenu>
节点豆
private String selectState; //+setters, getters
private String selectCity; //+setters, getters
private String selectRegion; //+setters, getters
private String selectStation; //+setters, getters
private List<SelectItem> stateList; //+setters, getters
private List<SelectItem> cityList; //+setters, getters
private List<SelectItem> regionList; //+setters, getters
private List<SelectItem> stationList; //+setters, getters
public getStateList(){
stateList= new ArrayList<SelectItem>();
stateList.add(new SelectItem("A"));
}
public getCityList(){
CityList= new ArrayList<SelectItem>();
if(selectState.equals("A")){
CityList.add(new SelectItem("B"));
}
}
public getRegionList(){
RegionList= new ArrayList<SelectItem>();
if(selectCity.equals("B")){
RegionList.add(new SelectItem("C"));
}
}
public getStationList(){
StationList= new ArrayList<SelectItem>();
if(selectRegion.equals("C")){
StationList.add(new SelectItem("D"));
}
}
它仅适用于前 2 个菜单。其他 2 个菜单获取null
值。