我想使用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的分组。我找不到任何其他的例子。
答案 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
。
selectOneMenu
wiki page - “包含动态列表”答案 1 :(得分:1)
在此示例中,getCars()
返回javax.faces.model.SelectItem
个对象的列表。这个类有一个子类,名为SelectItemGroup
,表示selectOneMenu
中的grup。忽略此对象的值字段,仅使用标签。因此,在列表中,您可以混合SelectItem
和SelectItemGroup
个对象来组织列表中的列表。请注意,作为组一部分的SelectItem
个对象在SelectItemGroup
对象中作为数组出现。您可以通过构造函数或setter(setSelectItems()
)设置该数组。