<p:datatable selection =“”>上是否必须使用SelectableDataModel;我该如何实现它</p:datatable>

时间:2013-08-21 16:16:40

标签: jsf primefaces

当我想在SelectableDataModel上使用selection属性时,是否必须创建一个实现<p:dataTable>的类?如果是,我如何将我的dataTable与实现SelectableDataModel

的类“链接”

1 个答案:

答案 0 :(得分: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();
    }

}

最后使用itemModel代替items作为<p:dataTable value>

<p:dataTable value="#{bean.itemModel}" var="item" ... />