XHTML方面:
<p:dataTable id="selectProductTable" var="product" value="#{manageFormsView.productModel}" selection="#{manageFormsView.product}" >
Run Code Online (Sandbox Code Playgroud)
豆边:
private SelectableDataModel<Product> productModel=new SelectableDataModel<Product>() {
@Override
public Product getRowData(String rowKey) {
//In a real app, a more efficient way like a query by rowKey should be implemented to deal with huge data
for(Product product : productList) {
if(product.getModel().equals(rowKey))
return product;
}
return null;
}
@Override
public Object getRowKey(Product p) {
return p.getModel();
}
};
Run Code Online (Sandbox Code Playgroud)
我不想生成一个实现SDM的新类,我不能像上面那样进行内联实现吗?
我得到例外:
javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
Run Code Online (Sandbox Code Playgroud)
异常消息具有误导性.仅实现SelectableDataModel
接口是不够的.您还需要扩展一个DataModel
实现,如ListDataModel
.这无法在匿名类的风格中完成.你真的需要创建另一个类.
public class ProductDataModel extends ListDataModel<Product> implements SelectableDataModel<Product> {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您有共同的基本权利(getId()
等等),您可以根据需要进行整合,这样您就不需要为每个实体创建另一个.
public class BaseEntityDataModel<E extends BaseEntity> extends ListDataModel<E> implements SelectableDataModel<E> {
// ...
}
Run Code Online (Sandbox Code Playgroud)
作为一个完全不同的替代方案,你也可以使用它的rowKey
属性,<p:dataTable>
并让它指的是完全相同的值SelectableDataModel#getRowKey()
.这样您就不再需要整个SelectableDataModel
界面了.
<p:dataTable ... rowKey="#{product.model}">
Run Code Online (Sandbox Code Playgroud)
既然你似乎不具备任何特殊的功能getRowData
和getRowKey
,我觉得你不需要做这样复杂的事情.<p:dataTable>
具有单一选择模式selection
和rowKey
属性,应该充分地完成工作.你的桌子应该是这样的:
<p:dataTable var="p" value="#{mrBean.products}" rowKey="#{p.model}"
selection="#{mrBean.selectedProduct}" selectionMode="single">
... // Your columns
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
您可以在以下selectedProduct
属性中获取所选行ManagedBean
:
@ManagedBean
@ViewScoped
public class MrBean {
private List<Product> products;
private Product selectedProduct;
// Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13689 次 |
最近记录: |