![](/img/trans.png)
[英]DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled, but I have already defined rowKey
[英]DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled
我试图在启用 RowSelection 的情况下实现一个 DataTable Editable。
但它抛出了一个异常:
启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel。
我在对象类和托管 bean 类中都实现了 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.