2012-05-28 16 views
7

परिदृश्य (सरलीकृत) है:एक सूची <String> पर <ui:repeat><h:inputText> का उपयोग करते हुए मॉडल को अपडेट नहीं करता महत्व देता

वहाँ एक सेम (इसे कहते mrBean) एक सदस्य के साथ है और उचित getters/setters:

private List<String> rootContext; 

public void addContextItem() { 
    rootContext.add(""); 
} 

JSF कोड:

<h:form id="a_form"> 
      <ui:repeat value="#{mrBean.stringList}" var="stringItem"> 
        <h:inputText value="#{stringItem}" /> 
      </ui:repeat> 
      <h:commandButton value="Add" action="#{mrBean.addContextItem}"> 
       <f:ajax render="@form" execute="@form"></f:ajax> 
      </h:commandButton> 
</h:form> 

समस्या यह है, जब "जोड़ें" बटन, मूल्यों उद्यमों और संबंधित गतिविधियों थे कि क्लिक करने <h:inputText/> में लाल जो stringList में स्ट्रिंग का प्रतिनिधित्व नहीं करते हैं।

दरअसल, mrBean.stringList सेटर (setStringList(List<String> stringList)) कभी नहीं कहा जाता है।

कोई विचार क्यों?

कुछ जानकारी - मैं बिलाव 6.

उत्तर

20

पर MyFaces का उपयोग कर रहा JSF 2.0 String वर्ग अपरिवर्तनीय है और मूल्य के लिए एक सेटर नहीं है। गेटटर मूल रूप से Object#toString() विधि है।

आपको इसके बजाय List पर सीधे मान प्राप्त करने/सेट करने की आवश्यकता है। आप सूची सूचकांक द्वारा ऐसा कर सकते हैं जो <ui:repeat varStatus> द्वारा उपलब्ध है।

<ui:repeat value="#{mrBean.stringList}" varStatus="loop"> 
    <h:inputText value="#{mrBean.stringList[loop.index]}" /> 
</ui:repeat> 

आपको stringList के लिए एक सेटटर की आवश्यकता नहीं है। ईएल को List#get(index) द्वारा आइटम प्राप्त होगा और आइटम को List#add(index,item) पर सेट करें।

+0

धन्यवाद! मुझे लगा कि समस्या अपरिवर्तनीय होने के साथ थी, लेकिन मुझे नहीं पता था कि जेएसएफ किसी तरह इस पर काबू पा सकता है या नहीं। यह वास्तव में बहुत धन्यवाद देता है। – Ben

+0

आपका स्वागत है। – BalusC

+0

तो, loop.index यहां सूची के वर्तमान तत्व की अनुक्रमणिका देता है? – user3663882