简体   繁体   中英

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

I was trying to implement one DataTable Editable with RowSelection enabled.

But it is throwing out an exception:

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

I implemented the DataModel in both the object class and the managed bean class but the error is the same. Now only a blank table appears for me. Please help.

There are two solutions for this problem:

  1. Adding rowKey, selection and selectionMode attributes to dataTable
  2. Implementing SelectableDataModel interface and extending a DataModel like ListDataModel for filling the dataTable

First one is Simpler. Adding rowKey="#{myEntity.carID}" to your p:dataTable should solve your problem

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

In addition to the Solutions given by rags, I would like to mention that if the row key is "NULL" or if your entire List is "NULL" you may get the same error, even if you have completed all the above mentioned steps. If you want to show 0 row, return a list with 0 items. Don't return null for the list.

The error message indicates that your DataModel does not implement the SelectableDataModel interfaces. It needs to be a separate class. This is an example from the PF showcase how the data table definition needs to be done:

import org.primefaces.model.SelectableDataModel;  

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

Don't forget to surround the rowKey value within EL syntax.

rowKey="row.id" 

will fail but

rowKey="#{row.id}" 

will succeed.

Possibly the error is because the row.id is empty or null in my case the solution be change this:

rowKey="row.id" 

to this:

rowKey="row" 

And the Object of datatable, for example

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

Row (Object) implements Serializable:

public class Row implements Serializable{...}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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