2012-09-25 12 views
5

मैंने Use enum in h:selectManyCheckbox में वर्णित एनम कनवर्टर लिखा है? सब कुछ ठीक था जब तक हम यह नहीं मानते कि यह कनवर्टर प्राइमफेस में संपादन योग्य डेटाटेबल में ठीक से काम नहीं करता है। नक्शा विशेषताप्राइमफेस में EnumConverter संपादन योग्य डेटाटेबल

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

बाद विधि (getAsObject) में विशेषता है कि मैं घटकों को दे दिया नहीं पा सके: समस्या यह है कि हालांकि मैं निम्नलिखित के रूप में getAsString और getAsObject तरीकों मौजूद विशेषता जोड़ा है। लेकिन pprimefaces संपादन योग्य डेटाटेबल सब कुछ ठीक है। क्या यह हासिल करने के लिए कोई समाधान है?

उत्तर

2

यह समस्या इसलिए होती है क्योंकि कस्टम घटक विशेषता प्राइमफ़ेस डेटाटेबल की पंक्ति स्थिति में सहेजी नहीं गई थी (यह मानक h:dataTable में ठीक काम करता है)।

हमें इस जानकारी को कहीं और स्टोर करने की आवश्यकता होगी। घटक आईडी के साथ दृश्य दायरे में एक तरीका होगा।

getAsString() में:

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

और getAsObject() में:

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

धन्यवाद एक बहुत! मेरे लिए काम किया – demdem

संबंधित मुद्दे