2012-09-25 33 views
5

Escribí un EnumConverter que se describe en Use enum in h:selectManyCheckbox? Todo estuvo bien hasta que reconocemos que este convertidor no funciona correctamente en la tabla de datos editable de Primeface. El problema es que aunque he añadido un atributo dentro de métodos getAsString y getAsObject como siguiente:EnumConverter en las tablas de datos editables de las primefas

@Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     if (value instanceof Enum) { 
      component.getAttributes().put(ATTRIBUTE_ENUM_TYPE, value.getClass()); 
      return ((Enum<?>) value).name(); 
     } else { 
      throw new ConverterException(new FacesMessage("Value is not an enum: " + value.getClass())); 
     } 
    } 
public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     Class<Enum> enumType = (Class<Enum>) component.getAttributes().get(ATTRIBUTE_ENUM_TYPE); 
     try { 
      return Enum.valueOf(enumType, value); 
     } catch (IllegalArgumentException e) { 
      throw new ConverterException(new FacesMessage("Value is not an enum of type: " + enumType)); 
     } 
    } 

En el último método (getAsObject) no pudo encontrar el atributo que di a los componentes de atributos de mapa. Pero fuera de la base de datos editable pprimefaces todo está bien. ¿Hay alguna solución para lograr esto?

Respuesta

2

Este problema se debe a que el atributo del componente personalizado no se guardó en el estado de la fila del datatable PrimeFaces (funciona bien en el estándar h:dataTable).

Vamos a necesitar almacenar esta información en otro lugar. En la vista, el alcance junto con la identificación del componente sería de una sola manera.

En el getAsString():

context.getViewRoot().getViewMap().put(ATTRIBUTE_ENUM_TYPE + component.getId(), value.getClass()); 

Y en el getAsObject():

Class<Enum> enumType = (Class<Enum>) context.getViewRoot().getViewMap().get(ATTRIBUTE_ENUM_TYPE + component.getId()); 
+0

Gracias mucho! Trabajó para mi. – demdem

Cuestiones relacionadas