I've a selectable PrimeFaces 3.4.1 datatable:

<p:dataTable value="#{projectAdminisrationMB.selectedUserMemberOfGroups}" var="group1" 
    rowKey="#{group1.name}" selectionMode="single" selection="#{projectAdminisrationMB.selectedBelongToGroup}">
    ...
</p:dataTable>

I'm getting this error:

com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit Grave: javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.

But I have already set rowKey as per FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled. How is this caused and how can I solve it?

2

There are 2 best solutions below

2
BalusC On

This can occur when the EL expression in the rowKey attribute ever evaluates null.

Make sure that the name property of your Group instance is never null. Otherwise better use a property representing the autogenerated DB primary key, such as #{group1.id} — if you have one.

1
Carl Roberts On

Just FYI - I have experienced the same error when using the Primefaces column filters. If I use the filters and click on a refresh button to reload the table, I then experience the error. If I don't use the column filters, then the error never occurs when I refresh the table. I have a couple of column filters that perform filter logic on the same field that contains the full name by extracting either the first name or last name, so I suspect this issue is in relation to those filters. I haven't figured out the issue yet but I wanted to share this with you in case that it helps. And I am using rowKey.