Java 如何填充richfaces选取列表的右侧?
我正在使用Richfaces,我想用我的支持bean中的SelectItems列表填充右侧面板 填充左侧不是backingbean的问题,但是,右侧是有问题的 这就是我现在拥有的Java 如何填充richfaces选取列表的右侧?,java,jsf,richfaces,Java,Jsf,Richfaces,我正在使用Richfaces,我想用我的支持bean中的SelectItems列表填充右侧面板 填充左侧不是backingbean的问题,但是,右侧是有问题的 这就是我现在拥有的 <h:outputText value="Roles" /> <rich:pickList showButtonsLabel="false"> <f:selectItems value="#{Bean.allRoles}" /> </rich:pickList>
<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
我需要能够在列表1和列表2之间移动单个角色,然后保存新的角色集。我认为挑选名单将是这份工作的最佳对象 将选取列表的值设置为SelectItem值的数组 无论您从右侧开始使用什么,基本上都只是选择列表的默认值:
<rich:pickList value="#{aBean.rightSideValues}">
<f:selectItems value="#{aBean.leftSideValues}"/>
</rich:pickList>
您需要此代码:
<h:outputText value="Roles" />
<rich:pickList showButtonsLabel="false" value="#{bean.chosenRoles}">
<f:selectItems value="#{Bean.allRoles}" />
</rich:pickList>
当您想要创建默认角色时,只需将这些角色添加到chosenRoles数组中(例如在bean构造函数中)。这样,chosenRoles将始终包含拾取列表右侧的元素,而左侧的元素不在数组中
希望这有帮助 看来我找到了解决办法
<rich:pickList value="#{aBean.rightSideValues}">
<f:selectItems value="#{aBean.leftSideValues}"/>
</rich:pickList>
请注意,SelectItem接受第一个参数,该参数是对SomeObject的引用。在内部文件中,rich faces将比较来自“#{aBean.rightSideValues}”的对象与来自
{aBean.leftSideValues}
借助该方法
SomeObject.equals()
如果需要文本以外的值,则需要制作一个转换器
参见rf4.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());
}
我正在尝试…我得到一个错误:java.lang.IllegalArgumentException:值不是字符串谢谢,我一直在尝试新的东西。对不起。实际上,您希望它是selectItem的值,而不是selectItem本身。+1为我们提供了一个非常完整的列表构建过程的解释,以及对象之间的比较,这在官方文档中甚至没有指定()。非常感谢。为什么使用字符串[]?它不能是带有转换器的列表吗?
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;
}
@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());
}