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 次 |
| 最近记录: |