jsf - rowselectmode - DataModel debe implementar org.primefaces.model.SelectableDataModel cuando la selección esté habilitada
selection primefaces datatable (5)
Además de las Soluciones dadas por los trapos, me gustaría mencionar que si la clave de fila es "NULA" o si toda su Lista es "NULA", puede obtener el mismo error, incluso si ha completado todos los pasos mencionados anteriormente. Si desea mostrar 0 filas, regrese una lista con 0 elementos. No devuelva null
para la lista.
Estaba intentando implementar un DataTable Editable con RowSelection habilitado.
Pero está arrojando una excepción:
DataModel debe implementar org.primefaces.model.SelectableDataModel cuando la selección esté habilitada.
Implementé DataModel tanto en la clase de objeto como en la clase de bean administrado, pero el error es el mismo. Ahora solo aparece una tabla en blanco para mí. Por favor ayuda.
El mensaje de error indica que su DataModel no implementa las interfaces de SelectableDataModel. Debe ser una clase separada. Este es un ejemplo del escaparate de PF sobre cómo debe hacerse la definición de la tabla de datos:
import org.primefaces.model.SelectableDataModel;
public class CarDataModel extends ListDataModel<Car> implements SelectableDataModel<Car> {
...
}
Hay dos soluciones para este problema:
- Adición de rowKey, selection y selectionMode attributes a dataTable
- Implementando la interfaz SelectableDataModel y ampliando un modelo de datos como ListDataModel para llenar el dataTable
El primero es más simple. Agregando rowKey="#{myEntity.carID}"
a su p:dataTable
debería resolver su problema
No te olvides de rodear el valor rowKey dentro de la sintaxis EL.
rowKey="row.id"
fallará pero
rowKey="#{row.id}"
podría suceder.
Puede obtener este error si intenta agregar un nuevo elemento a la lista subyacente y olvida asignar un valor a rowKey del nuevo elemento. O en otras palabras, para el ejemplo, si myEntity.carID es nulo.