2012-04-30 18 views
9

हैलो मैं इस कोड को सशर्त मेरा पेज में घटकों रेंडर करने के लिए है:सशर्त प्रतिपादन

<h:commandButton action="#{Bean.method()}" value="Submit"> 
    <f:ajax execute="something" render="one two" /> 
</h:commandButton> 

<p><h:outputFormat rendered="#{Bean.answer=='one'}" id="one" value="#{messages.one}"/></p> 
<p><h:outputFormat rendered="#{Bean.answer=='two'}" id="two" value="#{messages.two}"/></p> 

यह जवाब हो जाता है और घटक से प्रस्तुत होती है आदेश अपने पन्ने पर यह देखने के लिए, मैं ताज़ा करने की आवश्यकता पृष्ठ। मैं इस समस्या को कैसे ठीक करुं? कोई सुझाव?

उत्तर

14

जेएसएफ घटक का rendered विशेषता एक सर्वर-साइड सेटिंग है जो नियंत्रित करती है कि जेएसएफ को वांछित HTML उत्पन्न करना चाहिए या नहीं।

<f:ajax> टैग की render विशेषता JSF जेनरेट किया गया HTML तत्व है जो JavaScript को ajax अनुरोध की पूरी पर इसकी सामग्री को बदलने के लिए में HTML डोम पेड़ से document.getElementById() से प्राप्त कर सकते हैं की एक (सापेक्ष) ग्राहक आईडी इंगित करना चाहिए।

हालांकि, चूंकि आप एक HTML तत्व की क्लाइंट आईडी निर्दिष्ट कर रहे हैं जिसे जेएसएफ द्वारा कभी प्रदान नहीं किया जाता है (renderedfalse होने के कारण), जावास्क्रिप्ट इसे HTML DOM पेड़ में नहीं ढूंढ सकता है।

आप एक कंटेनर घटक है जो हमेशा प्रदान की गई है में लपेट और इस तरह हमेशा एचटीएमएल डोम वृक्ष में उपलब्ध की जरूरत है।

<h:commandButton action="#{Bean.method()}" value="Submit"> 
    <f:ajax execute="something" render="messages" /> 
</h:commandButton> 

<p> 
    <h:panelGroup id="messages"> 
     <h:outputFormat rendered="#{Bean.answer=='one'}" value="#{messages.one}"/> 
     <h:outputFormat rendered="#{Bean.answer=='two'}" value="#{messages.two}"/> 
    </h:panelGroup> 
</p> 

असंबंधित ठोस समस्या के लिए, आप एक संभव डिजाइन गलती है। ,

<h:commandButton action="#{Bean.method()}" value="Submit"> 
    <f:ajax execute="something" render="message" /> 
</h:commandButton> 

<p> 
    <h:outputFormat id="message" value="#{Bean.message}" /> 
</p> 
+0

आपके उत्तर के लिए धन्यवाद। मैंने जो किया है वह है कि मैंने अपने फॉर्म में रेंडर = "@ फॉर्म" का इस्तेमाल किया और यह काम किया। मैंने जो भी सुझाव दिया है, मैं कोशिश करूंगा। – sandra

+0

यह वास्तव में भी काम करेगा, जब तक यह घटक का अभिभावक है जो हमेशा * प्रस्तुत किया जाता है (ठीक उसी तरह मेरा जवाब आपको बताने की कोशिश कर रहा है)। यदि फॉर्म में 10 अन्य घटक शामिल हैं, तो केवल एक अनावश्यक ओवरहेड हो सकता है, उदाहरण के लिए, बिल्कुल अद्यतन करने की आवश्यकता नहीं है। – BalusC

+0

क्या हम AJAX रेंडर में स्थिति जोड़ सकते हैं? –

-1
style="visibility: #{questionchoose.show==false ? 'hidden' : 'visible'}" 
+0

यह बेहतर प्रदर्शन नहीं करने के बजाए आइटम को बिल्कुल प्रस्तुत नहीं करना बेहतर है। – dwjohnston

3

मैं जानता हूँ कि यह प्रश्न के केंद्रीय बिंदु नहीं है: आप क्यों नहीं बस एक #{Bean.message} संपत्ति आप के बजाय कार्रवाई विधि में वांछित संदेश के साथ सेट जो है, ताकि आप केवल उपयोग कर सकते हैं लेकिन जैसा कि मुझे अतीत में कई बार यह समस्या थी, मैं इसे यहां दूसरों की मदद करने के लिए यहां पोस्ट करता हूं। प्राइमफेस का उपयोग करने वालों के लिए प्राइमफेस एक्सटेंशन में एक घटक है जिसे Switch कहा जाता है।

कभी-कभी आपको मूल्य के आधार पर अलग-अलग आउटपुट या घटकों को प्रदर्शित करने की आवश्यकता होती है। आमतौर पर आप ui:fragment टैग का उपयोग कर इसे प्राप्त कर सकते हैं। pe:switch उपयोग टैग के साथ आपको ui:fragment rendered="#{!empty someController.value}" जैसी विभिन्न जांचों के साथ ui:fragment टैग घोषित करने की आवश्यकता नहीं होगी।

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