繁体   English   中英

启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel

[英]DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled

我试图在启用 RowSelection 的情况下实现一个 DataTable Editable。

但它抛出了一个异常:

启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel。

我在对象类和托管 bean 类中都实现了 DataModel,但错误是相同的。 现在只有一张空白表格出现在我面前。 请帮忙。

这个问题有两种解决方案:

  1. 将 rowKey、selection 和 selectionMode 属性添加到 dataTable
  2. 实现 SelectableDataModel 接口并扩展像 ListDataModel 这样的 DataModel 来填充数据表

第一个更简单。 rowKey="#{myEntity.carID}"到您的p:dataTable应该可以解决您的问题

如果您尝试将新项目添加到基础列表并忘记为新项目的 rowKey 赋值(rowKey 为 null),则会出现此错误。

除了 rags 给出的解决方案,我想提一下,如果行键是“NULL”或者如果你的整个 List 是“NULL”,你可能会得到同样的错误,即使你已经完成了上面提到的所有步骤。 如果要显示 0 行,请返回一个包含 0 个项目的列表。 不要为列表返回null

该错误消息表明您的 DataModel 未实现SelectableDataModel接口。 它需要是一个单独的类。 这是 PF 中的一个示例,展示了需要如何完成数据表定义:

import org.primefaces.model.SelectableDataModel;  

public class CarDataModel extends ListDataModel<Car> implements SelectableDataModel<Car> {    
   ...
}

不要忘记在 EL 语法中将 rowKey 值括起来。

rowKey="row.id" 

会失败但是

rowKey="#{row.id}" 

将会成功。

可能错误是因为在我的情况下 row.id 为空或 null 解决方案是改变这个:

rowKey="row.id" 

对此:

rowKey="row" 

和数据表的对象,例如

List<Row> collectionOfDataTable = new ArrayList<>();

Row (Object) 实现了可序列化:

public class Row implements Serializable{...}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM