2013-02-22 12 views
5

में मैं इस (अत्यंत सरलीकृत संस्करण) की तरह एक JSF facelet पृष्ठ है:Primefaces p: संवाद हमेशा दिखाई नहीं देता है, तो अद्यतन = "dlg" CommandButton

<h:form id="frmAnagPersonName"> 
     <p:commandButton value="Edit" icon="ui-icon-gear" 
         update="@form :frmEdit" 
         onsuccess="_dlgEdit.show()"/> 
     ... 
     <p:dataTable etc... 
     ... 


    </h:form> 

    <p:dialog id="dlgEdit" widgetVar="_dlgEdit" dynamic="true" modal="true" closable="true" 
       header="Person Identity"> 
     <h:form id="frmEdit" > 
      <p:panelGrid id="pnlEdit" columns="2"> 
       <p:outputLabel id="lblName" for="eName" value="Name"/> 
       <p:inputText id="eName" value="#myBean.personName}" 
      </p:panelGrid> 
     </h:form> 
    </p:dialog> 

यह ठीक काम करता है, जब तक मैं एक डाल संवाद में dynamyc हैडर:

update="@form :dlgEdit" 
:

<p:dialog ... header="#{myBean.header}" ... > 

और इस बिंदु पर मेरे पास है p:commandButton में update विशेषता को बदलने के लिए

लेकिन इस मामले में संवाद केवल बटन पर पहले क्लिक पर दिखाई देगा। यह दूसरी बार दिखाई नहीं देगा, फिर फिर से दिखाएं ...
क्यों? मैं हमेशा संवाद कैसे दिखा सकता हूं?

धन्यवाद

+0

इस पीएफ किस संस्करण है शुरू होता है? अपने संवाद पर 'appendToBody =" true "सेट करने का प्रयास करें। जब डीओएम दिखाता है तो डीओएम की स्थिति में अंतर भी देखें जब यह – kolossus

+0

नहीं है, तो उस स्थिति को भी ध्यान में रखें जिस पर संवाद दिखाता है: ऑनस्यूप। सफलता क्या ब्लॉक? – kolossus

+0

मैं प्राइमफेसेस 3.5 का उपयोग करता हूं। 'appendToBody' कोई प्रभाव नहीं है। 'अपूर्ण' और 'ऑनसुसे' दोनों को कॉल किया जाता है (मैंने जेएस 'अलर्ट()' के साथ प्रयास किया)। मैं डोम की स्थिति कैसे देख सकता हूं? (मेरी अज्ञानता के लिए खेद है ;-)) – yankee

उत्तर

11

का प्रयोग करें oncompleteonsuccess विशेषता के बजाय विशेषता।

<p:commandButton ... update="@form :dlgEdit" oncomplete="_dlgEdit.show()" /> 

onsuccess विशेषता लागू सीधे जब ajax प्रतिक्रिया सफलतापूर्वक आ रहा है, लेकिन लंबे समय से पहले ajax अद्यतन ajax प्रतिक्रिया पर आधारित प्रदर्शन कर रहे हैं है। AJAX अपडेट सफलतापूर्वक पूरा होने पर oncomplete विशेषता लागू की जाती है। the tag documentation of <p:commandButton> भी देखें।

असल में, इस घटना के मंगलाचरण आदेश है:

  • onclick हैंडलर शुरू हो जाती है
  • ajax अनुरोध पर process
  • onbegin हैंडलर शुरू हो जाती है
  • ajax अनुरोध भेज दिया जाता है आधारित प्रपत्र डेटा के साथ तैयार किया जाता है
  • AJAX प्रतिक्रिया सफलतापूर्वक पुनर्प्राप्त की गई है (HTTP स्थिति कोड 200 है)
  • onsuccess हैंडलर शुरू हो जाती है
  • ajax अद्यतन आधारित HTML डोम में प्रदर्शन कर रहे हैं पर update
  • oncomplete हैंडलर
+0

मैं बस यह कहूंगा कि मेरी राय यह है कि इस उदाहरण में 'गतिशील = "सत्य" का कोई अर्थ नहीं है, क्योंकि AJAX अनुरोध के बाद संवाद पहले ही पूरी तरह से अपडेट हो चुका है, इसलिए AJAX प्रतिक्रिया में पूरा संवाद होगा, और गतिशील रूप से संवाद लोड करने के लिए एक और AJAX अनुरोध किया जाएगा। – partlov

+0

@partlov: हां वास्तव में, उस विशेषता को छोड़ा जा सकता है। हालांकि, यह उपयोगी है अगर आपके पास संवाद में अपेक्षाकृत बड़ी सामग्री है और आप इसे प्रारंभिक अनुरोध पर तुरंत लोड नहीं करना चाहते हैं, लेकिन केवल तभी जब पहली बार संवाद खोला जाए। – BalusC

+0

मुझे नहीं पता कि प्राइमफेस यहां कैसे कार्य करेगा, लेकिन यदि गतिशील संवाद पूरी तरह से अपडेट किया गया है, तो शायद यह "लोड नहीं हुआ" राज्य में है, क्योंकि इसे प्रारंभ में लोड किया गया है।तो संवाद की AJAX लोडिंग फिर से निकाल दिया जाएगा? शायद मैं गलत हूं लेकिन मैं अभी यह जांचने की स्थिति में नहीं हूं। – partlov

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