我正在尝试制作4个依赖/级联选择组件。在这个问题中,选择组件恰好是<h:selectOneMenu>
,但这当然适用于任何其他种类的选择组件,例如<h:selectManyCheckbox>
,<p:selectCheckboxMenu>
等。>
[当用户从第一个菜单中选择一项时,第二个菜单将显示相关数据,而当用户从第二个菜单中选择一项时,第三个菜单将显示相关数据,依此类推。
用户将仅在第一个菜单上看到项目,其他项目将为空白。如果他在第一个菜单上选择一个项目,则第二个菜单将显示数据,但第三个和第四个菜单将保持空白,依此类推。用户最终必须从所有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个菜单获取
null
值。
我正在尝试制作4个依赖/级联选择组件。在这个问题中,选择分量恰好是
将bean放入视图范围,并摆脱getter方法中的任何业务逻辑。
您的代码中有错字错误。对于第三个菜单,您给定的ID名称为“第一个”,而不是“第三个”。可能是因为这个问题。
尝试一下,可能会对您有所帮助
您面临此问题,因为您有两次id="first"
。解决此问题,它应该可以工作。