我尝试过使用这样的分组选择:
<h:selectOneMenu value="#{selectionLabBean.oneSelectMenuGroup}"
id="SelectOneMenuGroup" >
<f:selectItems value="#{selectionLabBean.heroGroupList}" />
</h:selectOneMenu>
<p:message for="SelectOneMenuGroup" />
heroGroupList 是这样的:
SelectItem[] heroArr = new SelectItem[] {
new SelectItem("Paladin"),
...
};
heroListWithGrouping.add(
new SelectItemGroup("Human",
"A collection of human race Heroes",
false,
heroArr
)
);
.....
我想知道我是否可以使用 POJO 而不是 SelectItem 对象进行这种分组?
如果我无法做到这一点,我想我必须以某种方式将我的域对象或我的查询结果转换为 SelectItem 数组以使其工作。
有任何想法吗 ?
最佳答案
当您想使用 SelectItemGroup
时,这确实是不可能的。 .您需要从 POJO 的集合转换为 List<SelectItem>
在bean(后)构造期间的双for循环中。
@PostConstruct
public void init() {
List<HeroRace> heroRaces = getItSomehowFromDatabase();
this.heroGroupList = new ArrayList<SelectItem>();
for (HeroRace heroRace : heroRaces) {
SelectItemGroup group = new SelectItemGroup(heroRace.getName()); // Human, etc
List<SelectItem> heroes = new ArrayList<SelectItem>();
for (Hero hero : heroRace.getHeroes()) {
heroes.add(new SelectItem(hero.getName()); // Paladin, etc
}
group.setSelectItems(heroes.toArray(new SelectItem[heroes.size()]));
this.heroGroupList.add(group);
}
}
您也可以使用
Hero
作为项目值heroes.add(new SelectItem(hero, hero.getName()); // Paladin, etc
这样就可以绑定(bind)
#{selectionLabBean.oneSelectMenuGroup}
到 Hero
键入而不是 String
.但是你需要提供一个 Converter
. Amorfis 已经回答了那部分。
关于JSF 2 : selection grouping with SelectItemGroup + POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4553093/