2013-03-27 3 views
7

दिखा रहा है मेरे पास एक बटन है जिसमें Primafaces overlayPanel खुलता है। पैनल में एक और बटन है जो अजाक्स क्रिया करता है और फिर ओवरले बंद करता है।प्राइमफेस गतिशील ओवरलेपैन केवल एक बार

<h:form> 
    <p:commandButton id="button1" value="Open overlay" type="button"/> 
    <p:overlayPanel for="button1" widgetVar="ovl" dynamic="true"> 
     <p:commandButton value="Close" oncomplete="ovl.hide();" 
         update="@form"/> 
    </p:overlayPanel> 
</h:form> 

कृपया ध्यान दें कि पैनल dynamic="true" होना आवश्यक है गतिशील सामग्री असली आवेदन में दिलवाया जाना चाहिए क्योंकि, और update="@form" अन्य रूप अवगत कराने के लिए की जरूरत है:
यहाँ सभी में कोई अजाक्स कार्रवाई के साथ एक सरलीकृत संस्करण है अवयव।

समस्या यह है: यदि मेरे पास दोनों एटिब्यूट्स हैं, dynamic="true" और update="@form" ओवरले केवल पहली बार दिखाई देता है। "बंद करें" बटन पर क्लिक करने के बाद, यदि मैं एक बार "ओपन ओवरले" पर क्लिक करने का प्रयास करता हूं, तो पैनल दिखाई नहीं देगा।

मैं क्या गलत कर रहा हूं?

(का उपयोग करते हुए PrimeFaces 3.5 और ग्लासफिश 3.1.2.2)

उत्तर

0

क्या मैं नीचे दिए गए कोड के साथ देखा जैसे ही आप खुली ओवरले बटन युक्त फार्म पर अद्यतन करते हैं, यह टूट जाता है है।

<h:form> 
    <p:commandButton id="button1" value="Open overlay" type="button"/> 
    <p:commandButton value="break things" update="@form" /> 
    <p:overlayPanel for="button1" dynamic="true"> 
     <p:commandButton value="Close" update="@form" /> 
    </p:overlayPanel> 
</h:form> 

यदि यह दो भागों में विभाजित करने के लिए प्रपत्र ठीक है, बटन OverlayPanel में एम्बेडेड, ओवरले चालू करने के लिए इस्तेमाल किया बटन पर क्लिक आह्वान करने के लिए कोशिश कर सकते। शायद नीचे के साथ लाइन में कुछ।

<h:form> 
    <p:commandButton id="button1" value="Open overlay" type="button"/> 
    <p:overlayPanel for="button1" dynamic="true" > 
     <p:commandButton value="Close" update=":formToBeUpdated" onclick="document.getElementById('button1').click();"/> 
    </p:overlayPanel> 
</h:form> 

<h:form id="formToBeUpdated"> 
    <h:inputText value="bleh"/> 
</h:form> 
+0

धन्यवाद Aksel। दुर्भाग्य से ओवरले कई अलग-अलग विचारों में उपयोग किए जाने वाले समग्र घटक का हिस्सा है, इसलिए इसे मूल रूप तत्व द्वारा होस्ट किया जाना चाहिए: यह अपने स्वयं के रूप को परिभाषित नहीं कर सकता क्योंकि मैं नेस्टेड रूपों के साथ समाप्त होता हूं। – yankee

13

बटन में उपयोग onclick="widgetVar.loadContents()"overlaypanel, जहां widgetVaroverlayPanel का वर है नीचे गिर।

+1

धन्यवाद यह काम किया। आपको यह विधि कैसे मिली, यह प्राइमफ़ेस उपयोगकर्ता मार्गदर्शिका में सूचीबद्ध नहीं है। –

+2

अपडेटेडः ऑनक्लिक = "पीएफ ('विजेट वार') लोडकंट्स();" – Koekiebox

0

आपको अपना ओवरलेपेनल एक आईडी और अपने बटन के ऑनकप्लीट को इसे दिखाना चाहिए। कोड इस प्रकार है:

<h:form> 
    <p:commandButton id="button1" value="Open overlay" type="button" oncomplete="PF('ovlID').show()"/> 
    <p:overlayPanel id="ovlID" for="button1" widgetVar="ovl" dynamic="true"> 
     <p:commandButton value="Close" oncomplete="ovl.hide();" 
        update="@form"/> 
    </p:overlayPanel> 
</h:form> 
संबंधित मुद्दे