我尝试使用以下类似的方法处理分组选择:
<h:selectOneMenu value="#{selectionLabBean.oneSelectMenuGroup}"
id="SelectOneMenuGroup" >
<f:selectItems value="#{selectionLabBean.heroGroupList}" />
</h:selectOneMenu>
<p:message for="SelectOneMenuGroup" />
Run Code Online (Sandbox Code Playgroud)
heroGroupList是这样的:
SelectItem[] heroArr = new SelectItem[] {
new SelectItem("Paladin"),
...
};
heroListWithGrouping.add(
new SelectItemGroup("Human",
"A collection of human race Heroes",
false,
heroArr
)
);
.....
Run Code Online (Sandbox Code Playgroud)
而且我想知道我是否可以使用POJO而不是SelectItem对象进行这种分组?
如果我无法实现这一点,我想我必须以某种方式将我的域对象或我的查询结果转换为SelectItem数组以使其工作.
有任何想法吗 ?
当你想要使用时,这确实是不可能的SelectItemGroup.你需要List<SelectItem>在bean(post)构造过程中从POJO的集合转换为双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);
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用Hero项目值
heroes.add(new SelectItem(hero, hero.getName()); // Paladin, etc
Run Code Online (Sandbox Code Playgroud)
这样你就可以绑定#{selectionLabBean.oneSelectMenuGroup}到一个Hero类型而不是String.但是你需要提供一个Converter.Amorfis已经回答了这一部分.
| 归档时间: |
|
| 查看次数: |
4539 次 |
| 最近记录: |