javascript - प्रबंधित बीन से एक जावास्क्रिप्ट फ़ंक्शन को कॉल करना




jsf primefaces (4)

आप बस नहीं कर सकते

Managed Bean ब्राउज़र पर सर्वर और जावास्क्रिप्ट पर काम करता है।

आप प्रबंधितबीन में मान सेट के आधार पर सशर्त रूप से जावास्क्रिप्ट को आवेदक बना सकते हैं

जेएसएफ में प्रबंधित बीन से जावास्क्रिप्ट फ़ंक्शन को कॉल करने (निष्पादित करने का कोई तरीका है?

यदि यह प्रासंगिक है, तो मैं प्राइमफेस का भी उपयोग कर रहा हूं।


आम तौर पर, जावा एक स्क्रिप्टिंग इंजन का उपयोग कर स्ट्रिंग का मूल्यांकन करने के लिए एक एपीआई प्रदान करता है। यह javax.script.ScriptEngine और javax.script.ScriptEngineManager कक्षाओं द्वारा पूरा किया जा सकता है।

मुझे पूरी तरह से यकीन नहीं है कि आपकी स्थिति क्या है, लेकिन यदि आप जावास्क्रिप्ट को प्रबंधित बीन में स्ट्रिंग के रूप में पास कर सकते हैं, तो आप शायद सर्वर स्क्रिप्ट पर जावास्क्रिप्ट चलाने के लिए जावा स्क्रिप्टिंग एपीआई का उपयोग कर सकते हैं।

अधिक जानकारी के लिए, इस लिंक को देखें: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html


प्राइमफेसेस प्री 6.2 में, आप इसके लिए RequestContext#execute() उपयोग कर सकते हैं।

public void submit() {
    // ...
    RequestContext.getCurrentInstance().execute("alert('peek-a-boo');");
}

प्राइमफेस 6.2 और ऊपर में:

public void submit() {
    // ...
    PrimeFaces.current().executeScript("alert('peek-a-boo');");
}

मानक जेएसएफ में, इसके लिए कोई प्रत्यक्ष सार्वजनिक एपीआई नहीं है। वांछित स्क्रिप्ट को एक बीन संपत्ति के रूप में सेट करना और सशर्त रूप से <h:outputScript> घटक प्रस्तुत करना है जब बीन संपत्ति खाली नहीं है।

<h:commandButton ... action="#{bean.submit}" />
<h:outputScript rendered="#{not empty bean.script}">#{bean.script}</h:outputScript>
public void submit() {
    // ...
    script = "alert('peek-a-boo');";
}

यदि आप AJAX द्वारा फ़ॉर्म सबमिट कर रहे हैं, तो <h:outputScript> को किसी अन्य घटक में लपेटना न भूलें और इसके बजाय <h:outputScript> अपडेट करें। यह भी देखें कि अजाक्स अपडेट / रेंडर एक घटक पर काम नहीं करता है जिसने विशेषता प्रदान की है

<h:commandButton ... action="#{bean.submit}">
    <f:ajax execute="@form" render="script" />
</h:commandButton>
<h:panelGroup id="script">
    <h:outputScript rendered="#{not empty bean.script}">#{bean.script}</h:outputScript>
</h:panelGroup>

"उस के लिए कोई प्रत्यक्ष सार्वजनिक एपीआई नहीं है" कथन, उत्सुकता से PartialResponseWriter क्लास (जेएसएफ AJAX प्रतिक्रिया लिखने के लिए ज़िम्मेदार) पहले से ही जेएसएफ 2.0 startEval() और endEval() विधियों से है जो आपको सीधे कॉलबैक स्क्रिप्ट लिखने में सक्षम बनाता है प्रतिक्रिया लेकिन आगामी जेएसएफ 2.3 तक आश्चर्यजनक रूप से PartialViewContext में कोई सार्वजनिक विधि नहीं है जो उन तरीकों से प्रतिनिधि होगी। मुद्दे के अनुसार 1412 PartialViewContext#getEvalScripts() को अंततः सार्वजनिक एपीआई में जोड़ा गया है।

public void submit() {
    // ...
    FacesContext.getCurrentInstance().getPartialViewContext().getEvalScripts().add("alert('peek-a-boo');");
}

पुराने जेएसएफ संस्करणों के लिए, इसे केवल कस्टम PartialViewContext कार्यान्वयन बनाकर कार्यान्वित किया जा सकता है। जेएसएफ यूटिलिटी लाइब्रेरी ओमनीफेस ने ओमनीपार्टियल व्यू कॉन्टेक्स्ट के साथ बिल्कुल किया है जिसका प्रयोग Ajax यूटिलिटी क्लास के माध्यम से किया जा सकता है।

public void submit() {
    // ...
    Ajax.oncomplete("alert('peek-a-boo');");
}

यह भी देखें:


आप जिस प्राइमफेस पर हैं, उसके आधार पर आप RequestContext.execute("{js here}"); उपयोग कर सकते हैं RequestContext.execute("{js here}");

प्राइमफेस से 3.4 दस्तावेज:

जब अनुरोध AJAX अनुरोध पूरा हो जाता है, तो अनुरोध कॉन्टेक्स्ट जावास्क्रिप्ट निष्पादित करने का एक तरीका प्रदान करता है, यह दृष्टिकोण गुजरने वाले कॉलबैक पैराम की तुलना में आसान है और सशर्त जावास्क्रिप्ट निष्पादित करता है। AJAX अनुरोध पूरा होने पर नीचे दिया गया उदाहरण संवाद को छुपाता है;

कोड

public void save() {
  RequestContext requestContext = RequestContext.getCurrentInstance();  
  requestContext.execute("dialog.hide()");
}




managed-bean