我想获得这个:
<h:form id="form">
<p:dataTable value="#{testBean.allItems}" var="item" selection="#{testBean.category.itemList}" selectionMode="multiple">
<p:column>#{item.name}</p:column>
</p:dataTable>
</h:form>
,其中
@ManagedBean
public class TestBean
{
private static List<Item> itemDB = new ArrayList<Item>();
static
{
itemDB.add(new Item("zero"));
itemDB.add(new Item("one"));
itemDB.add(new Item("two"));
itemDB.add(new Item("three"));
itemDB.add(new Item("four"));
itemDB.add(new Item("five"));
}
private Category category;
@PostConstruct
public void init()
{
category = new Category();
category.setName("root");
category.getItemList().add(itemDB.get(2));
category.getItemList().add(itemDB.get(3));
}
public List<Item> getAllItems()
{
return itemDB;
}
public Category getCategory()
{
return category;
}
public void setCategory(Category category)
{
this.category = category;
}
}
我认为我的选择是:
有什么好主意吗?
答案 0 :(得分:0)
对于这种情况,Collections-API有一些相对简单的方法。
Item[] itemArr = itemDB.toArray(new Item[0]);
和
itemDB = Arrays.asList(itemArr);
答案 1 :(得分:0)
这就是我的做法。到目前为止,我还没有对它进行过大量的测试,但它似乎确实有效。我认为Primefaces的补丁可能是更好的解决方案。
以下是我想要使用的列表方法:
public List<R> getSelectionRecordList() {
return selectionItems;
}
public void setSelectionRecordList(List<R> selectionItems) {
this.selectionItems = selectionItems;
}
这是我为访问该列表而添加的两个额外数组方法。
public R[] getSelectionRecordArray() {
if (null == selectionItems) {
return null;
}
return (R[]) selectionItems.toArray();
}
public void setSelectionRecordArray(R[] selectionArray) {
if (null == selectionArray || selectionArray.length == 0) {
selectionItems = null;
} else {
selectionItems = new ArrayList<R>(selectionArray.length);
for (R record : selectionArray) {
this.selectionItems.add(record);
}
}
}
答案 2 :(得分:0)
我用我自己的班级扩展了主要DataTable
。