2012-12-08 10 views
5

के साथ काम नहीं करती है मेरे पास एक घटक है जिसे मैं commandButton हिट करने के बाद दिखाना/छिपाना चाहता हूं।AJAX रेंडर विशेषता rendered = "false" घटक

यह इस तरह है:

<h:commandButton id="showButton" value="#{bean.wasPressed ? 'Hide' : 'Show'}"> 
    <f:ajax listener="#{bean.toggle()}" render="explanation showButton" /> 
</h:commandButton> 

और

<h:panelGroup id="explanation" rendered="#{bean.wasPressed}"> 
    <h:outputText value="something" /> 
</h:panelGroup> 

bean.toggle() बस wasPressed संपत्ति सही या गलत का उचित रूप से सेट। मैं <h:form prependId="false"> का उपयोग कर रहा हूँ।

समस्या मेरे बटन की render विशेषता का मान है। यह स्पष्ट रूप से दोनों को बताता है: explanation और showButton

जब तक showButton हमेशा मौजूद होता है (यह केवल इसके लेबल को बदलता है), explanation केवल तभी मौजूद होता है जब wasPressed संपत्ति सत्य है। अन्यथा यह कहते हैं:

malformedXML: अद्यतन के दौरान: explanaition

मैं इस समस्या को कैसे हल कर सकते हैं नहीं मिला?

मैं स्रोत कोड में तत्व को छिपाने के लिए वापस नहीं लौटना चाहूंगा, इसलिए मैं किसी भी jQuery टॉगल (-) या style="display: none" या इनमें से किसी भी सामग्री का उपयोग करके तत्व छिपाने का कोई भी तरीका नहीं उपयोग करना चाहता हूं।

क्या यह जेएसएफ 2.1 में भी प्राप्त करने योग्य है?

+2

को देखो एक आईडी के साथ कि panelGroup करने के लिए एक आवरण जोड़ें और यह उल्लेख करने के लिए .... आप एक गाया नहीं JSF elememt http का उल्लेख नहीं कर सकते हैं: // stackoverflow। कॉम/ए/10707789/617373 – Daniel

+0

एक आकर्षण की तरह काम करता है, धन्यवाद! क्या आप कृपया इस प्रश्न का उत्तर जोड़ सकते हैं, इसलिए मैं इसे स्वीकार कर पाऊंगा? –

+0

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

उत्तर

9

आप तत्व है जो गाया नहीं कर रहे हैं अद्यतन कर सकते हैं नहीं, गाया = false डोम पेड़ से तत्वों को दूर करने के लिए "करने के लिए एक JSF तरीका है",

अपने सीएसएस प्रदर्शन पसंद नहीं: none या visibility: hidden < - इस दो तत्वों को डीओएम पेड़ में रखेगा लेकिन छुपाएगा, जबकि जेएसएफ ने गाया था = झूठी डॉट पेड़ में तत्व भी प्रस्तुत नहीं करेगा (आप इसे पृष्ठ के "स्रोत स्रोत" में भी नहीं देख पाएंगे)

तो आपके मामले में आपको पैनल समूह को किसी अन्य 'पैनल समूह' से लपेटने और रैपर

<h:commandButton id="showButton" value="#{bean.wasPressed ? 'Hide' : 'Show'}"> 
    <f:ajax listener="#{bean.toggle()}" render="explanationWrapper showButton" /> 
</h:commandButton> 


<h:panelGroup id="explanationWrapper"> 
    <h:panelGroup id="explanation" rendered="#{bean.wasPressed}"> 
     <h:outputText value="something" /> 
    </h:panelGroup> 
</h:panelGroup> 
के आईडी को अपडेट करने की आवश्यकता है

भी इसी तरह प्रश्न

Can you update an h:outputLabel from a p:ajax listener?

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