如何在selectOneMenu中对selectItems进行分组

时间:2013-01-31 13:19:59

标签: jsf-2 primefaces selectonemenu

我想使用primefaces showcase 中的示例对selectOneMenu中的selectItems进行分组:

<h:outputText value="Grouping: " />  
    <p:selectOneMenu value="#{formBean.car}">  
        <f:selectItem itemLabel="Select One" itemValue="" />  
        <f:selectItems value="#{formBean.cars}" />  
    </p:selectOneMenu> 

我的问题是,没有实现bean。现在我不知道,如何在getCars()方法中实现selectItems的分组。我找不到任何其他的例子。

2 个答案:

答案 0 :(得分:16)

展示广告#{formBean}的源代码可用here。以下是相关摘录:

private List<SelectItem> cars;

public FormBean() {
    SelectItemGroup g1 = new SelectItemGroup("German Cars");
    g1.setSelectItems(new SelectItem[] {new SelectItem("BMW", "BMW"), new SelectItem("Mercedes", "Mercedes"), new SelectItem("Volkswagen", "Volkswagen")});

    SelectItemGroup g2 = new SelectItemGroup("American Cars");
    g2.setSelectItems(new SelectItem[] {new SelectItem("Chrysler", "Chrysler"), new SelectItem("GM", "GM"), new SelectItem("Ford", "Ford")});

    cars = new ArrayList<SelectItem>();
    cars.add(g1);
    cars.add(g2);
}

因此,您的遗失密钥为SelectItemGroup

另见:

答案 1 :(得分:1)

在此示例中,getCars()返回javax.faces.model.SelectItem个对象的列表。这个类有一个子类,名为SelectItemGroup,表示selectOneMenu中的grup。忽略此对象的值字段,仅使用标签。因此,在列表中,您可以混合SelectItemSelectItemGroup个对象来组织列表中的列表。请注意,作为组一部分的SelectItem个对象在SelectItemGroup对象中作为数组出现。您可以通过构造函数或setter(setSelectItems())设置该数组。