当我想在SelectableDataModel
上使用selection
属性时,是否必须创建一个实现<p:dataTable>
的类?如果是,我如何将我的dataTable与实现SelectableDataModel
?
答案 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" ... />