24

我试图实现一个启用 RowSelection 的 DataTable Editable。

但它抛出了一个异常:

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

我在对象类和托管 bean 类中都实现了 DataModel,但错误是一样的。现在对我来说只有一个空白表。请帮忙。

4

6 回答 6

42

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

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

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

于 2012-05-09T10:41:52.470 回答
22

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

于 2013-03-21T14:23:39.993 回答
3

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

于 2014-11-25T04:51:23.537 回答
2

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

import org.primefaces.model.SelectableDataModel;  

public class CarDataModel extends ListDataModel<Car> implements SelectableDataModel<Car> {    
   ...
}
于 2012-05-09T10:08:31.593 回答
0

不要忘记在 EL 语法中包围 rowKey 值。

rowKey="row.id" 

会失败但是

rowKey="#{row.id}" 

将会成功。

于 2014-11-22T02:42:12.003 回答
0

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

rowKey="row.id" 

对此:

rowKey="row" 

以及数据表的对象,例如

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

行(对象)实现可序列化:

public class Row implements Serializable{...}
于 2020-05-26T07:14:10.450 回答