2012-09-25 18 views
5

Use enum in h:selectManyCheckbox'da açıklanan bir EnumConverter yazdım? Her şey, bu dönüştürücünün, primefaces düzenlenebilir veritabamında düzgün çalışmadığını fark edene kadar iyiydi. I bileşenlerine verdi özelliği bulamadıkEnumConverter, ilk aşamalarda düzenlenebilir veri tabanına

@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)); 
     } 
    } 

ikinci yöntemi (getAsObject) içinde ilk özellik: Sorun şu şekilde getAsString ve getAsObject yöntemleri içinde bir özellik ilave rağmen olmasıdır. Ama pprimefaces düzenlenebilir veritabanın her şey iyi. Bunu başarmak için herhangi bir çözüm var mı? özel bileşen özellik datatable PrimeFaces satır halinde kaydedilmedi çünkü

cevap

2

Bu sorun (standart h:dataTable içinde çalışıyor) neden olmaktadır.

Bu bilgiyi başka bir yerde saklamamız gerekecek. Bileşen kimliği ile birlikte görünüm kapsamında tek yönlü olurdu. getAsString() yılında

:

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

Ve getAsObject() yılında:

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

Çok teşekkürler! Benim için çalıştı. – demdem

İlgili konular