我正在使用Richfaces'picklist,我想在右侧面板中填充来自我的支持bean的SelectItems列表。
填充左侧不是来自辅助bean的问题,但右侧是有问题的。
这就是我目前所拥有的
<h:outputText value="Roles" />
<rich:pickList showButtonsLabel="false">
<f:selectItems value="#{Bean.allRoles}" />
</rich:pickList>
修改
所以我有角色'a','b','c'和'd'。
用户有角色'a'和'd',所以'a'和'd'应位于右侧面板上,'b'和'c'应位于左侧面板上。
修改
进一步解释。
我有三个用户列表。
所有列表的数据类型都为ArrayList<SelectItem>
。
我需要能够在列表编号1和列表编号2之间移动单个角色,然后保存新的角色集。我认为该选项列表将是该工作的最佳richfaces对象。
答案 0 :(得分:6)
似乎我找到了解决方案。
<rich:pickList value="#{aBean.rightSideValues}">
<f:selectItems value="#{aBean.leftSideValues}"/>
</rich:pickList>
"#{aBean.rightSideValues}"
应指向列表或数组
对象。这些价值观正确
将填充选择列表。
#{aBean.leftSideValues}
应指向SelectItem列表
对象
ONE NOTICE - SelectItem对象必须使用"#{aBean.rightSideValues}"
中的对象构建。
<强> 实施例 强>
class ABean{
...
List<SomeObject> getRightSideValues(){
...
}
List<SelectItem> getLeftSideValues(){
List<SomeObjects> someObjects = getAllAvailableObjects();
List<SelectItem> sItems = new ArrayList<SelectItem>();
for(SomeObject sObj : someObjects){
SelectItem sItem = new SelectItem(sObj, sObj.toString());
sItems.add(sItem);
}
return sItems;
}
请注意,SelectItem接受第一个参数,此参数是SomeObject的引用。在内部丰富的面孔中,将 "#{aBean.rightSideValues}"
中的对象与来自的对象进行比较
#{aBean.leftSideValues}
借助方法
SomeObject.equals()
答案 1 :(得分:3)
您需要此代码:
<h:outputText value="Roles" />
<rich:pickList showButtonsLabel="false" value="#{bean.chosenRoles}">
<f:selectItems value="#{Bean.allRoles}" />
</rich:pickList>
并在你想要的bean中:
private String[] chosenRoles;
+ getter/setter
当您想要创建默认角色时,只需将角色添加到selectedRoles数组中(例如在bean构造函数中)。这样,selectedRoles将始终包含选项列表右侧的元素,而左侧的元素不在数组中。
希望这有帮助!
答案 2 :(得分:1)
如果您需要文本以外的值,则需要制作转换器。
请参阅http://programmingnutsandbolts.blogspot.com/2009/08/richfaces-picklist-converters.html
答案 3 :(得分:1)
与RF 4.3.3一样,也可能更早,您还需要覆盖模型类(实体bean)的哈希方法。因此,仅覆盖转换器的equals方法是不够的。以下内容适用于我和我的PubThread实体bean。
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (!(obj instanceof PubThread))
return false;
PubThread objectToCheck = (PubThread) obj;
boolean isShallowCopy = (this.id.equals(objectToCheck.id));
return isShallowCopy;
}
@Override
public int hashCode() {
return (this.id.hashCode());
}
答案 4 :(得分:0)
将pickList的值设置为SelectItem值的数组。
无论你从右手边开始,基本上只是pickList的默认值:
<rich:pickList value="#{aBean.rightSideValues}">
<f:selectItems value="#{aBean.leftSideValues}"/>
</rich:pickList>