2013-01-09 7 views
5

मैं JSF 2 वेब अनुप्रयोग विकसित कर रहा हूँ और परिणाम मानों को निर्दिष्ट और यूआरएल के मान बदल पृष्ठ से पृष्ठ अंतर्निहित नेविगेशन का उपयोग कर। मेरे पास कुछ अजाक्स अनुरोध भी हैं जो कुछ भी सबमिट किए बिना कुछ पृष्ठों में बदलाव करने में सक्षम हैं।कैसे पेज मार्गदर्शक के बीच JSF संदेश (बाद अनुप्रेषित-जीईटी) से निपटने के लिए

मेरी समस्या तब आती है जब उदाहरण के लिए, मैं उपयोगकर्ता के डेटा को संपादित करता हूं और परिवर्तनों को सहेजता हूं। प्रबंधित बीन उपयोगकर्ता डेटा को सहेजता है और उपयोगकर्ता सूची में नेविगेट करने के लिए एक स्ट्रिंग वापस करता है। जब उपयोगकर्ता ठीक से सहेजा जाता है, तो क्रिया विधि समाप्त होने से पहले FacesMessage जोड़ा जाता है। विधि

FacesContext.getCurrentInstance().addMessage(clientId, 
    new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg)); 

में

बटन

<p:commandButton value="#{msg.UPDATE}" action="#{manager.actionSave}" 
      ajax="false" /> 

कोड हालांकि, और यहां तक ​​कि मैं अपने मुख्य पृष्ठ में एक <h:messages /> टैग, कोई बात नहीं दिखाया जाता है।

+2

आपको फ़्लैश स्कोप में संदेशों को स्वयं जारी रखना होगा। [यह] देखें (http://stackoverflow.com/a/10369601) – kolossus

+0

संभावित डुप्लिकेट [अगले पृष्ठ पर एक फेस मैसेज पास करना] (http://stackoverflow.com/questions/12481506/passing-a-facesmessage-to -उथ-पेज) – Kowser

उत्तर

9

समस्या लक्षण पता चलता है कि आप, परिणाम में या तो faces-redirect=true पैरामीटर, या नेविगेशन मामले में <redirect/> प्रवेश द्वारा एक (डिफ़ॉल्ट) के बजाय किसी रीडायरेक्ट के नेविगेट कर रहे आगे अगर आप अभी भी विरासत नेविगेशन नियमों का उपयोग कर रहे हैं faces-config.xml में।

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

यदि रीडायरेक्ट करना वास्तव में अनिवार्य है, उदा। POST-Redirect-GET पैटर्न — को पूरा करने के लिए जो एक अच्छी बात — है, तो आपको फ़्लैश स्कोप में संदेश को स्टोर करने की आवश्यकता है। आप Flash#setKeepMessages() पर कॉल करके true पास करके ऐसा कर सकते हैं।

context.addMessage(clientId, message); 
context.getExternalContext().getFlash().setKeepMessages(true); 

नोट यदि आप एक Mojarra संस्करण 2.1.14 से अधिक उम्र के प्रयोग कर रहे हैं और एक अलग आधार फ़ोल्डर में एक संसाधन के लिए पुनः निर्देशित कर रहे हैं कि इस असफल हो जायेगी। issue 2136 भी देखें।

+0

यह सही तरीका है, धन्यवाद @ बालुससी। वैसे, क्या इसे कॉन्फ़िगरेशन फ़ाइल या ऐसा कुछ करने का कोई तरीका है? मूल रूप से मेरे द्वारा जोड़े गए प्रत्येक संदेश के लिए विधि को कॉल करने से रोकने के लिए। –

+2

कुछ भी नहीं है। इसके लिए बस एक उपयोगिता वर्ग का उपयोग करें। OmniFaces इस के लिए ['संदेश'] (https://showcase-omnifaces.rhcloud.com/showcase/utils/Messages.xhtml) क्लास प्रदान करता है। जैसे 'Message.addFlashInfo (क्लाइंट आईडी, msg);' – BalusC

+0

इसे आज़माएगा। बस यह इंगित करना चाहता था कि चूंकि मैं नेविगेशन के लिए सुंदरफैस का उपयोग कर रहा हूं, यह हमेशा पोस्ट-रीडायरेक्ट-जीईटी पैटर्न के अनुसार होता है। http://ocpsoft.org/support/prettyfaces-users/how-to-do-post-redirect-get-after-action-with-prettyfaces –

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