सवाल क्या मैं जेएसएफ बैकिंग बीन विधि से जेएसएफ घटक अपडेट कर सकता हूं?


क्या जेएसएफ बैकिंग बीन पृष्ठ पर किसी घटक का अद्यतन करने का कोई तरीका है? मैं पृष्ठ पर किसी घटक को अद्यतन करने के लिए अद्यतन विशेषता के साथ AJAX घटक का उपयोग नहीं कर रहा हूं। मुझे एक जेएसएफ बैकिंग बीन विधि के भीतर से एक अद्यतन ट्रिगर करने की आवश्यकता है। ध्यान दें कि इस विधि को पूर्ण होने या उसके पूरा होने से पहले पृष्ठ पर अपडेट हो सकता है। मैं प्राइमफेस का उपयोग कर रहा हूं, अगर कोई समाधान है जो प्राइमफेस का उपयोग करने से हो सकता है।


76
2017-07-06 15:22


मूल


सत्यापन त्रुटि ट्रिगर कर सकते हैं: stackoverflow.com/a/14401741/1599699 - Andrew


जवाब:


मानक जेएसएफ एपीआई का उपयोग करके, क्लाइंट आईडी जोड़ें PartialViewContext#getRenderIds()

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");

प्राइमफ़ेस विशिष्ट API का उपयोग करके, उपयोग करें RequestContext#update()

RequestContext.getCurrentInstance().update("foo:bar");

यदि आप जेएसएफ उपयोगिता पुस्तकालय का उपयोग करते हैं OmniFaces, उपयोग Ajax#update()

Ajax.update("foo:bar");

इस पर ध्यान दिए बिना, ध्यान दें कि उन क्लाइंट आईडी को पूर्ण क्लाइंट आईडी का प्रतिनिधित्व करना चाहिए नहीं के साथ prefixed NamingContainer विभाजक चरित्र जैसा कि आप दृश्य पक्ष से करेंगे।


140
2017-07-06 17:51



ऐसा प्रतीत होता है कि मैं इसे रेंडर रेस्पॉन्स चरण के दौरान काम नहीं कर सकता (जो दुर्भाग्यवश है जहां मुझे यह कोड रखने के लिए मजबूर किया जाता है)। अगर मैं आवेदन या पहले चरण में आमंत्रित करता हूं, तो चीजें ठीक काम करती हैं। रेंडर रिस्पांस चरण में होने के लिए कोई कामकाज? - BestPractices
नहीं, यह बहुत देर हो चुकी है। कार्रवाई चरण या प्रतिक्रिया चरण प्रस्तुत करने से पहले नौकरी को ले जाएं। विधि को आमंत्रित करें <f:ajax listener> या <f:event type="preRenderView" listener> - BalusC
जेएसएफ 1.2 के साथ ऐसा करने के बारे में कोई विचार है? अगर जवाब बहुत लंबा / जटिल है तो मैं एक नया सवाल पूछ सकता हूं। - RinaldoPJr
@RinaldoPJr: जेएसएफ 1.2 की कोई अवधारणा नहीं है <f:ajax>। यह जेएसएफ 2.0 के बाद से पेश किया गया है। आपको जेएसएफ 1.2 घटक लाइब्रेरी विशिष्ट सुविधाओं का सहारा लेना होगा। - BalusC
@DanielK: कोई विचार नहीं। मैं त्रिनिदाद नहीं करता हूं। यदि आप अभी भी त्रिनिदाद तरीके से नहीं समझ पा रहे हैं तो मानक जेएसएफ एपीआई दृष्टिकोण का उपयोग करें। - BalusC


मैंने जेएसएफ बैकिंग बीन / क्लास से एक घटक को अपडेट करने का भी प्रयास किया

यूआई घटक में हेरफेर करने के बाद आपको निम्न कार्य करने की आवश्यकता है:

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())

(सर्वर-साइड) घटक के बजाय क्लाइंट आईडी का उपयोग करना महत्वपूर्ण है !!


6
2017-07-02 10:48





RequestContext है पदावनत से प्राइमफेस 6.2। इस संस्करण से निम्नलिखित का उपयोग करें:

if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
    PrimeFaces.current().ajax().update(componentID);
}

और निष्पादित करने के लिए जावास्क्रिप्ट बैकबीन से इस तरह का उपयोग करें:

PrimeFaces.current().executeScript(jsCommand);

संदर्भ:


1
2018-06-07 19:28