我试图实现一个启用 RowSelection 的 DataTable Editable。
但它抛出了一个异常:
启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel。
我在对象类和托管 bean 类中都实现了 DataModel,但错误是一样的。现在对我来说只有一个空白表。请帮忙。
我试图实现一个启用 RowSelection 的 DataTable Editable。
但它抛出了一个异常:
启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel。
我在对象类和托管 bean 类中都实现了 DataModel,但错误是一样的。现在对我来说只有一个空白表。请帮忙。
这个问题有两种解决方案:
第一个更简单。添加rowKey="#{myEntity.carID}"
到您的p:dataTable
应该可以解决您的问题
如果您尝试将新项目添加到基础列表并忘记为新项目的 rowKey 分配值(rowKey 为空),则可能会出现此错误。
除了 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<>();
行(对象)实现可序列化:
public class Row implements Serializable{...}