2011-01-25 10 views
5

Primefaces उपयोगकर्ता में पर एक सेम पर एक JSF विधि कॉल करने के लिए गाइड है कि यह कैसे AJAX सर्वरPrimefaces जावास्क्रिप्ट का उपयोग सर्वर

PrimeFaces.ajax.AjaxRequest('/myapp/createUser.jsf', 
{ 
    formId: 'userForm', 
    oncomplete: function(xhr, status) {alert('Done');} 
}); 

क्या मैं समझ नहीं कैसे है कॉल करने की के उदाहरण से पता चलता एक विशेष विधि को कॉल करने के लिए। मेरा लक्ष्य जावास्क्रिप्ट का उपयोग कर क्लाइंट से सत्र को अमान्य करना है।

उत्तर

1

इसे @PostConstruct अनुरोध स्कोप्ड बीन की विधि में करें जो ईएल द्वारा #{bean} जैसे आवश्यक जेएसएफ पृष्ठ से जुड़ा हुआ है।

@ManagedBean 
@RequestScoped 
public class Bean { 

    @PostConstruct 
    public void init() { 
     // Here. 
    } 

} 

प्रश्न से संबंधित नहीं, मैं सिर्फ आश्चर्य है कि क्यों आप कभी भी इसे उस तरह से करना होगा? जेएसएफ/प्राइमफेस <f:ajax> और <p:ajax> और वाणिज्य का उपयोग करके बहुत अच्छे तरीके प्रदान करता है।

क्या यह विंडो के unload या beforeunload ईवेंट के दौरान इसे चलाने का इरादा है? यदि ऐसा है, तो मुझे आपको चेतावनी देना है कि यह विश्वसनीय नहीं है। यह ब्राउज़र पर निर्भर है कि क्या ऐसा अनुरोध वास्तव में सर्वर तक पहुंच जाएगा या नहीं। अक्सर यह नहीं होगा। केवल संवेदनशील सांख्यिकीय उद्देश्यों के लिए नहीं, शुद्ध सांख्यिकीय या समयपूर्व सफाई उद्देश्यों के लिए इसका उपयोग करें।

+0

मैं हो सकता है, किसी भी समय, 5 चल रहे अनुप्रयोग अप करने के लिए, अपने स्वयं के सत्र के साथ प्रत्येक। चूंकि उपयोगकर्ता ऐप से ऐप में स्विच करता है, इसलिए मैं अन्य अनुप्रयोगों को "जिंदा" रखता हूं ताकि वे उपेक्षा से बाहर न हों। हालांकि, एक बार "सक्रिय" ऐप के समय समाप्त हो जाने के बाद, मुझे यह सुनिश्चित करने के लिए दूसरों को "लॉगआउट" करने की आवश्यकता है कि वे चारों ओर न रहें। मेरे पास 1 सर्वलेट ऐप, 3 स्ट्रैट्स ऐप और 1 जेएसएफ ऐप है। किसी भी समय किसी भी समय "सक्रिय" ऐप हो सकता है। –

+1

यदि वे एक ही कंटेनर पर चलते हैं, तो बस उन्हें एक ही सत्र साझा करने दें। उदाहरण के लिए टोमकैट, आप इसे 'blankSessionPath =" true "' '''/conf/server.xml' में प्राप्त कर सकते हैं। – BalusC

+0

धन्यवाद, मैंने यही सुझाव दिया है, लेकिन ये मौजूदा ऐप्स वेबलॉग पर चल रहे हैं। मुझे नहीं लगता कि वे गारंटी दे सकते हैं कि एक ऐप से डेटा दूसरों के साथ टकरा नहीं जाएगा। दूसरे शब्दों में, मुझे नहीं लगता कि वे एक-दूसरे को एक दूसरे को ट्रामलिंग के साथ साझा कर सकते हैं। –

4

जो मैंने आम तौर पर किया है वह पृष्ठ पर एक छिपी हुई पी: कमांड लिंक्स डाल दिया गया है, फिर जावास्क्रिप्ट पर क्लिक() ईवेंट को कॉल करें।

<p:commandLink id="hiddenLink" 
    actionListener="#{bean.methodToInvoke}" style="display:none"/> 

फिर

$('#hiddenLink').click(); 
+0

ग्रेट विचार। लेकिन बीन के पैरामीटर कैसे पास करें? –

+0

इस पैरामीटर को तय किया गया है या जावास्क्रिप्ट के माध्यम से क्लाइंट-साइड समायोजित करने की आवश्यकता है या नहीं। यदि वे नहीं बदलते हैं, तो आप f: विशेषता का उपयोग कर सकते हैं। यदि वे क्लाइंट-साइड बदल सकते हैं, तो मैंने एच का उपयोग किया है: इन्हें प्रबंधित बीन के साथ धक्का देने के लिए फॉर्म पर कहीं और इनपुट किया गया है। – wrschneider

+0

मेरे मामले में, से तत्व आईडी को "छुपा लिंक" नहीं दिया गया है। इसके बजाय, इसे आईडी "j_idt5: hiddenLink" दिया जाता है। इसलिए, मुझे यह नहीं मिल रहा है। – gromit190

16

RemoteCommand कि क्योंकि यह आपको एक जावास्क्रिप्ट समारोह है कि सामान करता है प्रदान करता है (सेम समर्थन बुला, ताज़ा, फ़ॉर्म सबमिट आदि, सब कुछ प्राप्त करने के लिए एक अच्छा तरीका है वह कमांड लिंक कर सकता है)।

PrimeFaces 3.4 documentation से

:

<p:remoteCommand name="increment" actionListener="#{counter.increment}" 
out="count" /> 

<script type="text/javascript"> 
function customFunction() { 
    //your custom code 
    increment(); //makes a remote call 
} 
</script> 
संबंधित मुद्दे