I was trying to implement one DataTable Editable with RowSelection enabled.
But it is throwing out an exception:
DataModel must implement org.
There are two solutions for this problem:
First one is Simpler. Adding rowKey="#{myEntity.carID}"
to your p:dataTable
should solve your problem
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> {
...
}
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{...}
Don't forget to surround the rowKey value within EL syntax.
rowKey="row.id"
will fail but
rowKey="#{row.id}"
will succeed.
You can get this error if you try to add a new item to the underlying list and forget to assign a value to the new item's rowKey (the rowKey is null).