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

时间:2012-05-09 10:01:40

标签: jsf primefaces

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

但这是一个例外:

  

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

我在对象类和托管bean类中实现了DataModel,但错误是相同的。现在只为我显示一个空白表。请帮忙。

6 个答案:

答案 0 :(得分:39)

此问题有两种解决方案:

  1. 将rowKey,selection和selectionMode属性添加到dataTable
  2. 实现SelectableDataModel接口并扩展像ListDataModel这样的DataModel以填充dataTable
  3. 第一个是简单的。向rowKey="#{myEntity.carID}"添加p:dataTable可以解决您的问题

答案 1 :(得分:21)

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

import org.primefaces.model.SelectableDataModel;  

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

答案 4 :(得分:0)

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

rowKey="row.id" 

会失败,但

rowKey="#{row.id}" 

会成功。

答案 5 :(得分:0)

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

rowKey="row.id" 

对此:

rowKey="row" 

例如数据表的对象

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

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

public class Row implements Serializable{...}