1

でプロパティSelectableDataModelを使用したい場合、実装するクラスを作成することは必須ですか? はいの場合、どのように dataTable を実装するクラスに「リンク」できますか?selection<p:dataTable>SelectableDataModel

4

1 に答える 1

0

いいえ、それは必要ありません。を必要とせずに行の一意の識別子を把握できるrowKeyように、属性を指定するだけです。<p:dataTable>SelectableDataModel

<p:dataTable value="#{bean.items}" var="item" rowKey="#{item.id}" ...>

興味がある場合、または必要な場合は、次のように実装する必要があります。

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    private List<Item> items;
    private ItemDataModel itemModel;

    public Bean() {
        items = itemService.list();
        itemModel = new ItemDataModel(items);
    }

    // ...
}

ItemDataModelこのように見える場所:

public class ItemDataModel extends ListDataModel<Item> implements SelectableDataModel<Item> {  

    public ItemDataModel() {
        // Default c'tor, keep alive.
    }

    public ItemDataModel(List<Item> data) {
        super(data);
    }

    @Override
    public Item getRowData(String rowKey) {
        List<Item> items = (List<Item>) getWrappedData();

        for (Item item : items) {
            if (item.getId().equals(rowKey)) {
                return item;
            }
        }

        return null;
    }

    @Override
    public Object getRowKey(Item item) {
        return item.getId();
    }

}

最後にasitemModelの代わりに使用します。items<p:dataTable value>

<p:dataTable value="#{bean.itemModel}" var="item" ... />
于 2013-08-21T17:51:03.443 に答える