2011-11-22 16 views
5

जोड़ना मैं प्राइमफ़ेस घटकों को गतिशील रूप से जोड़ना चाहता हूं। मैं this one के समान समाधान है, जो वहाँ पहले चर्चा की गई थी उपयोग कर रहा हूँ:प्राइमफ़ेस घटकों को गतिशील रूप से

<h:form> 
    <h:panelGrid columns="2"> 
     <p:dataGrid id="categoriesGrid" value="#{bean.categories}" 
      var="categoryBean" rowIndexVar="rowIndex"> 
      <p:column> 
       <p:selectOneMenu id="categorySelect" effect="drop" 
        value="#{categoryBean.selectedCategory}" > 
        <f:selectItems value="#{categoryBean.availableCategories}" 
         var="category" itemLabel="#{category.name}" 
         itemValue="#{category}" /> 
       </p:selectOneMenu> 
      </p:column> 
     </p:dataGrid> 
     <p:commandButton actionListener="#{bean.addNewCategory}" 
      value="Add category" update="categoriesGrid"/> 
    </h:panelGrid> 
</h:form> 

लेकिन वहाँ इसके साथ समस्या है।

<?xml version='1.0' encoding='UTF-8'?> 
<partial-response> 
<error> 
    <error-name> 
     class javax.faces.component.UpdateModelException 
    </error-name> 
    <error-message> 
     <![CDATA[/createTutorial.xhtml @85,65 value= 
      "#{categoryBean.selectedCategory}":java.util.NoSuchElementException]]> 
    </error-message> 
</error> 
</partial-response> 

अग्रिम

+0

जैसा कि मैंने पाया [http://code.google.com/p/primefaces/issues/detail?id=1568), 'पी: कॉलम' जोड़ा जाना चाहिए, लेकिन AJAX के साथ समस्या अभी भी मौजूद है – nikagra

+0

कृपया अपना समाधान एक उत्तर के रूप में पोस्ट करें (जिसे आप बाद में स्वीकार कर सकते हैं)। – oers

+0

हां, ज़ाहिर है) – nikagra

उत्तर

2

समस्या मेरी सेम के साथ था धन्यवाद: वहाँ प्रतिक्रिया का उदाहरण मैं के बाद "श्रेणी जोड़ें" बटन क्लिक किया गया था प्राप्त है। चयनित आइटम प्राप्त करने के लिए, मुझे javax.faces.Converter इंटरफ़ेस के कस्टम कार्यान्वयन को लागू करना पड़ा। मेरी राय में इस तरह की सरल समस्या के लिए यह काफी काम है (इस कनवर्टर को डेटा स्रोत तक पहुंच प्राप्त करने में सक्षम होना चाहिए)। तो मैं एक छोटे से चाल कर दिया है:

public class CategoryBean{ 

    private list<Category> availableCategories; 
    private Category selectedCategory; 

    public Long getCSelectedCategory(){ 
     // Get selected category by it's id and set selectedCategory 
    } 

    public void setSelectedCategory(Long selectedCategory){ 
     return selectedCategory.getId(); 
    } 

    // The remaining setters and getters 
} 

और पेज कोड की इसी टुकड़ा अब लगता है कि:

<p:column> 
    <p:selectOneMenu id="categorySelect" effect="drop" 
     value="#{categoryBean.selectedCategory}" > 
     <f:selectItems value="#{categoryBean.availableCategories}" 
      var="category" itemLabel="#{category.name}" 
      itemValue="#{category.id}" /> 
    </p:selectOneMenu> 
</p:column> 

कृपया, itemValue विशेषता और उपयोग के तरीकों को दिखाया जाता है कि करने के लिए अपने ध्यान देते हैं। मेरे पास बग गलत गेट वापसी प्रकार था।

निष्कर्ष निकालना, मेरे मामले में गतिशील रूप से नए प्राइमफेस घटकों को जोड़ने की एकमात्र समस्या चयनित मूल्य लौटा रही थी। आप कनवर्टर लागू कर सकते हैं या समान चाल का उपयोग कर सकते हैं।

क्या ऐसी चाल आपकी राय में एक अच्छा समाधान है?

+0

यदि यह आपका अंतिम कोड है तो यह अच्छा नहीं लग रहा है और आपकी चाल एक अच्छी चाल नहीं है। क्योंकि, यदि आप इस 'value = "# {categoryBean.selectedCategory}" 'और यह' itemValue = "# {category.id}" पर एक नज़र डालें, तो यह भ्रमित लग रहा है। मुझे लगता है कि इस तरह के मामले में कनवर्टर का उपयोग करना एक अच्छा अभ्यास है। –

+0

टीएनएक्स, मैं कनवर्टर का उपयोग कर रहा हूं, कोड की अस्थायी शांति थी – nikagra

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