2012-05-09 16 views
21

Estaba intentando implementar una DataTable editable con RowSelection habilitado.DataModel debe implementar org.primefaces.model.SelectableDataModel cuando la selección esté habilitada

Pero es lanzar una excepción:

DataModel debe implementar org.primefaces.model.SelectableDataModel cuando se habilita la selección .

Implementé el modelo de datos 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.

+0

duplicado Posible http://stackoverflow.com/questions/12333764/datamodel-must-implement-org-primefaces-model-selectabledatamodel -cuando-selección .. –

Respuesta

2

El mensaje de error indica que su DataModel no implementa las interfaces SelectableDataModel. Debe ser una clase separada. Este es un ejemplo de la PF mostrar cómo hay que hacer la definición de la tabla de datos:

import org.primefaces.model.SelectableDataModel; 

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

Mi clase de entidad es StudyPlanCategorey.java que implementa SelectableDataModel.Además de esto tengo una clase ManagedBean también, aquí también traté de implementarlo pero no funcionó. – user1281029

+0

No sé si es posible usar una clase de entidad como DataModel. Tal vez sea una opción para separar la clase de entidad del modelo de datos. –

35

Hay dos soluciones para este problema:

  1. Adición rowKey, selección y SelectionMode atribuye a dataTable
  2. la implementación de interfaz SelectableDataModel y que se extiende una DataModel como ListDataModel para el llenado del dataTable

primero es más simple. Agregar rowKey="#{myEntity.carID}" a su p:dataTable debería resolver su problema

+0

Hola, separé la entidad de la clase de modelo. Casi había completado el segundo punto, pero hay un error que viene selection = "# {editBean.selectedSubStudyPlan}": La propiedad 'selectedSubStudyPlan' no se puede leer en typecom.buddhiedge.server.entity.StudyplanCategory Compruebe la parte XHTML también Aquí selection =" # {editBean.selectedSubStudyPlan} "y selectedSubStudyPlan es del tipo StudyplanCategorey que es la clase de entidad – user1281029

+0

¿Intentó darle rowKey a la tabla de datos? Esto es más simple. – rags

+0

Sí (la clave de la fila) está trabajando ahora. Gracias. – user1281029

19

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.

+1

Wow; este es un hallazgo increíble ... – SiB

+2

Esto necesita más votos positivos. – Dalton

+1

¡Increíble! Esto fue exactamente mi problema. Amo a Nublodeveloper. Es un genio. –

0

No se olvide de rodear el valor rowKey dentro de la sintaxis EL. rowKey = "row.id" fallará, pero rowKey = "# {row.id}" tendrá éxito.

3

Además de las Soluciones dadas por los trapos, me gustaría mencionar que si la clave de la fila es "NULA" o si toda su Lista es "NULA", puede obtener el mismo error, incluso si ha completado todas las pasos mencionados anteriormente. Si desea mostrar 0 filas, regrese una lista con 0 elementos. No devuelva una lista nula.

enfrentado el mismo problema y resuelto por la forma mencionada

gracias

Cuestiones relacionadas