1

我想得到这个:

<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;
    }
}

我认为我的选择是:

  1. 创建一种从 List 到 Array 的翻译器,反之亦然,但我对让它与 ValueExpressions 一起工作感到头疼......
  2. 扩展 PrimeFaces DataTable 和 DataTableRenderer 但搞清楚可能真的很痛苦

有更好的主意吗?

4

3 回答 3

0

对于这种情况,Collections-API 有一些相对简单的方法。

Item[] itemArr = itemDB.toArray(new Item[0]);

itemDB = Arrays.asList(itemArr);
于 2012-07-17T13:30:56.140 回答
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);
                }
            }
        }
于 2012-08-02T23:24:49.570 回答
0

DataTable用自己的班级扩展了primefaces。

于 2012-08-12T00:24:11.080 回答