gpt4 book ai didi

jsf - 实现 SelectableDataModel

转载 作者:行者123 更新时间:2023-12-05 01:14:03 38 4
gpt4 key购买 nike

XHTML 端:

<p:dataTable id="selectProductTable" var="product"  value="#{manageFormsView.productModel}" selection="#{manageFormsView.product}" >

bean 面:

  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();
}
};

我不想生成一个实现 SDM 的新类,我不能像上面那样进行内联实现吗?

我遇到异常:

javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.

最佳答案

异常消息具有误导性。仅实现 SelectableDataModel接口(interface)不够。您还需要扩展一个 DataModel 实现如 ListDataModel .这不能用匿名类的方式来完成。您确实需要创建另一个类。

public class ProductDataModel extends ListDataModel<Product> implements SelectableDataModel<Product> {

// ...

}

如果您有一个公共(public)基础实体(使用 getId() 等),您可以在必要时对其进行泛化,这样您就不需要为每个实体创建另一个实体。

public class BaseEntityDataModel<E extends BaseEntity> extends ListDataModel<E> implements SelectableDataModel<E> {

// ...

}

作为完全不同的替代方案,您还可以使用 rowKey <p:dataTable> 的属性并让它引用与 SelectableDataModel#getRowKey() 完全相同的值.这样你就不需要整个 SelectableDataModel不再有界面。

<p:dataTable ... rowKey="#{product.model}">

另见:

关于jsf - 实现 SelectableDataModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834244/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com