在JSF中制作多个从属/级联选择组件

问题描述 投票:9回答:4

我正在尝试制作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个依赖/级联选择组件。在这个问题中,选择分量恰好是,但这当然适用于任何其他种类...

jsf hierarchy selectonemenu cascading ajax-update
4个回答
9
投票

将bean放入视图范围,并摆脱getter方法中的任何业务逻辑。


0
投票

您的代码中有错字错误。对于第三个菜单,您给定的ID名称为“第一个”,而不是“第三个”。可能是因为这个问题。


-1
投票

尝试一下,可能会对您有所帮助


-4
投票

您面临此问题,因为您有两次id="first"。解决此问题,它应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.