jsf - जेएसएफ+प्राइमफेस:'अपडेट' विशेषता घटक अद्यतन नहीं करता है




jsf-2 primefaces (2)

मेरा लेआउट यहाँ है

<div id="mainPanel">
   <div id="padding">
       <h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/>
   </div>
   <div id="right">
       <h:form>
           <p:commandButton value="Update" actionListener="#{bean.toggleComment}" update="text" />
       </h:form>
   </div>
</div>

जब मैं लिंक Update क्लिक करता हूं, जिसे renderComment बूलियन चालू और बंद टॉगल करना होता है, तो यह टेक्स्ट Personal Feed के प्रदर्शन को टॉगल नहीं करता है। अब अगर मैं h:outputText आसपास एक फॉर्म h:outputText , और इसके बजाय form update करें, तो यह काम करता है। ऐसा क्यों है?


Answers

update विशेषता को HTML DOM पेड़ में मौजूदा क्लाइंट आईडी को इंगित करना चाहिए। हालांकि, चूंकि तत्व HTML DOM पेड़ में उपलब्ध नहीं है क्योंकि यह सर्वर पक्ष द्वारा प्रदान नहीं किया जाता है, जेएस / AJAX को HTML DOM पेड़ में अपडेट करने के लिए कुछ भी नहीं मिल सकता है।

वास्तव में, आपको इसे किसी अन्य तत्व में लपेटना चाहिए जो हमेशा एचटीएमएल डोम पेड़ में उपलब्ध होता है ताकि अजाक्स इसका पता लगा सके और फिर update में अपनी क्लाइंट आईडी का उपयोग कर सके। आपके मामले में, आप इसके लिए padding उपयोग कर सकते हैं।

<div id="mainPanel">
   <h:panelGroup id="padding" layout="block">
       <h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/>
   </h:panelGroup>
   <div id="right">
       <h:form>
           <p:commandButton value="Update" actionListener="#{bean.toggleComment}" update=":padding" />
       </h:form>
   </div>
</div>

नीचे दी गई प्रक्रिया जेबॉस एएस 7.2+ , जेबॉस ईएपी 6.1+ , और जेबॉस वाइल्डफली 8+ पर लागू होती है और मानती है कि आपके पास सर्वर स्थापना और कॉन्फ़िगरेशन पर पूर्ण नियंत्रण है। यह सर्वर-व्यापी डिफ़ॉल्ट जेएसएफ संस्करण को अपग्रेड करता है:

  • व्यक्तिगत Mojarra API और impl फ़ाइलों को डाउनलोड करें (और इस प्रकार एकल javax.faces.jar फ़ाइल नहीं)। वर्तमान नवीनतम 2.1.x संस्करण 2.1.2 9 है और वर्तमान नवीनतम 2.2.x संस्करण 2.2.14 है। आइए मान लें कि आप 2.2.x पर अपग्रेड करना चाहते हैं। आप उन्हें अपने मैवेन रिपोजिटरी से व्यक्तिगत रूप से डाउनलोड कर सकते हैं:
  • सुनिश्चित करें कि जेबॉस बंद हो गया है।
  • जेएसएफ एपीआई /modules/system/layers/base/javax/faces/api/main :
    • पुराने जेएआर फ़ाइल को हटाएं या बैकअप लें (इसे उसी फ़ोल्डर में न रखें, यहां तक ​​कि नाम भी नहीं बदला गया है!)।
    • वहां jsf-api-2.2.14.jar फ़ाइल jsf-api-2.2.14.jar
    • <resource-root> module.xml <resource-root path="jsf-api-2.2.14.jar"/> में नई फ़ाइल नाम निर्दिष्ट करने के लिए module.xml फ़ाइल खोलें और <resource-root> संपादित करें
  • जेएसएफ इत्यादि /modules/system/layers/base/com/sun/jsf-impl/main अद्यतन करें:
    • पुराने जेएआर फ़ाइल को हटाएं या बैकअप लें (इसे उसी फ़ोल्डर में न रखें, यहां तक ​​कि नाम भी नहीं बदला गया है!)।
    • वहां jsf-impl-2.2.14.jar फ़ाइल jsf-impl-2.2.14.jar
    • <resource-root> module.xml <resource-root path="jsf-impl-2.2.14.jar"/> में नई फ़ाइल नाम निर्दिष्ट करने के लिए module.xml फ़ाइल खोलें और <resource-root> संपादित करें
  • स्वच्छता जेबॉस कैश / कार्य डेटा यह सुनिश्चित करने के लिए कि वहां पर लटकाए गए पिछले तैनाती से जेएआर की कोई पुरानी प्रतिलिपि नहीं है जो संभावित रूप से केवल नए जारों से टकराएगी:
    • /standalone/data की सभी सामग्री को /standalone/data (कस्टम डेटा फ़ोल्डर्स को छोड़कर, अपलोड की गई फाइलों वाले फ़ोल्डर, बेशक)
    • /standalone/deployments की सभी सामग्री /standalone/deployments
    • /standalone/tmp की सभी सामग्री /standalone/tmp
  • जेबॉस शुरू करो। अब इसे सभी तैनाती के लिए नए जेएसएफ संस्करण का उपयोग करना चाहिए।

जेबॉस एएस 7.0 / 7.1 और जेबॉस ईएपी 6.0 पर एक ही प्रक्रिया लागू होती है, आपको केवल /modules/system/layers/base/* बजाय /modules/* ब्राउज़ करना होगा, और आपको वहां पुरानी। .index फ़ाइल को स्पष्ट रूप से हटाने की आवश्यकता है , यदि कोई है (जेबॉस एक स्वामित्व करेगा)। साथ ही, यदि API फ़ोल्डर में module.xml <module name="com.sun.jsf-impl"/> <dependencies> अंदर याद <dependencies> , तो आपको इसे मैन्युअल रूप से जोड़ना होगा।

महत्वपूर्ण नोट यह है कि 2.2.7 से पुराने पुराने org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition निम्नलिखित अपवाद के साथ तैनाती के दौरान एएस / ईएपी में विफल हो जाएंगे org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition । इसके बाद आप मूल रूप से 2 विकल्प हैं: Mojarra 2.1.x पर डाउनग्रेड करें, या कम से कम 2.2.7 या नए पर अपग्रेड करें।

यदि आप Mojarra 2.3 में अपग्रेड करना चाहते हैं, जो javax.faces.jar पर अब 2-जेएआर संस्करण प्रदान नहीं करता है, तो आपको इस प्रक्रिया के अनुसार javax.faces.jar फ़ाइल के आधार पर 2-जेएआर संस्करण मैन्युअल रूप से बनाना होगा। : WildFly पर जेएसएफ (javax.faces.jar) के एक जार संस्करण को कैसे स्थापित करें





jsf jsf-2 primefaces