दिलचस्प पोस्ट
सी में "अप्रयुक्त पैरामीटर" चेतावनी जावा में रिक्त स्थान पर स्प्लिट स्ट्रिंग, यदि उद्धरण चिह्नों के बीच में (यानी "टोक्यो के रूप में \" हैलो वर्ल्ड का इलाज करें) पायथन का उपयोग कर एक सीएसवी फ़ाइल संपादित करते समय हेडर छोड़ें मैं उद्देश्य सी का उपयोग करके आईओएस पर स्थानीय रूप से एक फाइल कैसे डाउनलोड और सहेज सकता हूं? मैं पायथन में एक लॉग फ़ाइल कैसे पूंछ सकता हूँ? पूंछ पुनर्कलन क्या है? सामग्री सुरक्षा नीति कैसे काम करती है? AngularJS एनजी-दोहरा में दोहराए गए तत्वों की गणना की गई Android में JSON को कैसे पार्स करना है सीएसएस कैल्श () फ़ंक्शन में एसएएस वैरिएबल मैं कैसे जांच करूं अगर कोई फ़ाइल जावा में मौजूद है? @ मीडिया स्क्रीन और (अधिकतम-चौड़ाई: 1024px) सीएसएस में क्या मतलब है? जब MySQL के बजाय MySQLi का उपयोग करना चाहिए I एंड्रॉइड: एक सर्वर पर समय-समय पर स्थान कैसे भेजा जाता है बूटस्ट्रैप-यू मोडल के साथ ui-router का उपयोग करना

कैसे JSF में नेविगेट करने के लिए? यूआरएल कैसे करें वर्तमान पेज को प्रतिबिंबित करें (और पिछला नहीं)

मैं वर्तमान में जेएसएफ सीख रहा हूं और यह आश्चर्यचकित था और जब मुझे एहसास हुआ कि जब भी हम <h:form> उपयोग करते हैं, तो JSF का मानक व्यवहार मुझे हमेशा ब्राउज़र में पिछले पृष्ठ का यूआरएल दिखाता है, जैसा कि यूआरएल के विपरीत वर्तमान पृष्ठ

मैं समझता हूं कि जिस तरह से जेएसएफ हमेशा एक ही पृष्ठ पर एक फार्म पोस्ट करता है और फिर जो भी पेज नियंत्रक इसे ब्राउज़र को वापस देता है, जो यह नहीं जानता कि पृष्ठ स्थान बदल गया है।

ऐसा प्रतीत होता है कि जेएसएफ लंबे समय से आस पास रहा है कि इस से निपटने के लिए एक साफ, ठोस तरीका होना चाहिए। यदि हां, तो क्या आप साझा करना चाहते हैं?

मुझे कई काम मिल चुके हैं, लेकिन दुख की बात है कि ऐसा कोई वास्तविक ठोस समाधान नहीं है।

  • बस स्वीकार करें कि यूआरएल भ्रामक है
  • प्रत्येक बीन की कार्रवाई के बदले मूल्य पर "?faces-redirect=true" जोड़ें और उसके बाद
    • कुछ और (फ्लैश स्कोप, सीडीआई वार्तालाप, सत्र सत्र, …) के साथ @RequestScoped को प्रतिस्थापित करने का तरीका जानें।
    • हर उपयोगकर्ता कार्रवाई के लिए दो HTTP दौर यात्राएं स्वीकार करें
  • यूआरएल में पृष्ठ का नाम छिपाने के लिए कुछ विधि (उदाहरण के लिए, 3 पार्टी लाइब्रेरी या कस्टम कोड) का उपयोग करें, हर पेज के लिए हमेशा एक ही जेनेरिक यूआरएल का उपयोग करें।

यदि "?faces-redirect=true" उतना ही अच्छा है जितना मिलता है, क्या इस तरह से सभी अनुरोधों का इलाज करने के लिए एक संपूर्ण एप्लिकेशन को कॉन्फ़िगर करना है?

वेब के समाधान से एकत्रित समाधान "कैसे JSF में नेविगेट करने के लिए? यूआरएल कैसे करें वर्तमान पेज को प्रतिबिंबित करें (और पिछला नहीं)"

दरअसल, जेएसएफ एक एमएसीसी फ्रेमवर्क के आधार पर आधारित आवेदन के रूप में पोस्ट फॉर्म को उसी यूआरएल को प्रस्तुत करता है जहां से <h:form> पेज का अनुरोध किया गया है। आप जेनरेट किए गए HTML आउटपुट के <form action> URL को देखकर इसकी पुष्टि कर सकते हैं। यह वेब डेवलपमेंट शब्दों में है जिसे पोस्टबैक के रूप में वर्णित किया गया है। पोस्टबैक पर एक नेविगेशन डिफ़ॉल्ट रूप से नए URL पर एक नया अनुरोध नहीं करता है, बल्कि इसके बजाय लक्ष्य पृष्ठ को प्रतिक्रिया की सामग्री के रूप में लोड करता है। यह वास्तव में भ्रमित है जब आप पेज-टू-पेज नेविगेशन चाहते हैं।

आम तौर पर, नेविगेशन / रीडायरेक्शन के रूप में सही दृष्टिकोण, व्यापार की आवश्यकताओं और अनुरोध की idempotence (पढ़ें: "बुकमार्कयोग्यता") पर निर्भर करता है।

  • यदि अनुरोध idempotent है, तो बस POST प्रपत्र (अर्थात <form> , <h:link> या <h:button> बजाय <h:form> और <h:commandXxx> बजाय एक GET फ़ॉर्म / लिंक का उपयोग <h:button> )।
    उदाहरण के लिए, पृष्ठ-टू-पेज नेविगेशन, Google- जैसे खोज फ़ॉर्म, आदि।

  • यदि अनुरोध गैर-idempotent है, तो परिणाम को सशर्त रूप से एक ही दृश्य में दिखाएं (यानी वापसी null या void और जैसे <h:message(s)> और / या rendered ) का उपयोग करें।
    उदाहरण के लिए, डेटा प्रविष्टि / संपादित करें, बहु-चरण विज़ार्ड, मोडल संवाद, पुष्टिकरण फ़ॉर्म आदि।

  • अगर अनुरोध गैर-idempotent है, लेकिन लक्ष्य पृष्ठ idempotent है, तो बस POST के बाद एक रीडायरेक्ट भेजें (यानी ?faces-redirect=true या <redirect/> साथ रिटर्न परिणाम)।
    उदाहरण के लिए, सफल संपादन के बाद सभी डेटा की सूची दिखा रहा है, लॉगिन के बाद रीडायरेक्ट आदि।

ध्यान दें कि शुद्ध पेज-टू-पेज नेविगेशन आमतौर पर idempotent है और यह वह जगह है जहां कई जेएसएफ स्टार्टर्स इसके लिए कमांड लिंक / बटन का अपमान करते हैं और उसके बाद शिकायत करते हैं कि यूआरएल में परिवर्तन नहीं होता है। यह भी ध्यान रखें कि नेवीगेशन मामलों का उपयोग शायद ही वास्तविक दुनिया के अनुप्रयोगों में किया जाता है जो एसईओ / यूएक्स के संबंध में विकसित किए जाते हैं और यह वह जगह है जहां कई जेएसएफ ट्यूटोरियल्स पाठकों को अन्यथा विश्वास दिलाते हैं।

यह भी ध्यान रखें कि POST का उपयोग GET से "अधिक सुरक्षित" नहीं है क्योंकि अनुरोध पैरामीटर तुरंत URL में दिखाई नहीं दे रहे हैं। वे अब भी HTTP अनुरोध बॉडी में दिखाई देते हैं और अभी भी जोड़ तोड़ सकते हैं। इसलिए "सुरक्षा" की खातिर idempotent अनुरोधों के लिए POST पसंद करने का बिल्कुल कोई कारण नहीं है असली सुरक्षा एचटीटीपीएस के बजाय एचटीटीपी और व्यावसायिक सेवा के तरीकों की जांच करना है यदि वर्तमान में लॉग-इन उपयोगकर्ता को इकाई एक्स की जांच करने की अनुमति है या इकाई एक्स आदि में हेरफेर करने की अनुमति है। एक सभ्य सुरक्षा ढांचा इस के लिए टिप्पणियां प्रदान करता है।

यह भी देखें:

  • रीडायरेक्ट और नेविगेशन / अग्रेषित और क्या इस्तेमाल करने के दौरान क्या अंतर है?
  • JSF अप्रत्यक्ष बनाम स्पष्ट नेविगेशन
  • दृश्य पैरामीटर सुविधा के माध्यम से बुकमार्कयोग्यता
  • <F: मेटाडाटा>, <f: viewParam> और <f: viewAction> के लिए क्या इस्तेमाल किया जा सकता है?
  • जब मैं एच का प्रयोग करना चाहिए: h: commandLink के बजाय outputLink?
  • संस्थाओं के लिए मास्टर-विस्तार पृष्ठों का निर्माण करना, उन्हें कैसे लिंक करना है और किस बीन क्षेत्र को चुनना है
  • JSF फॉर्म पर GET अनुरोध क्वेरी स्ट्रिंग मापदंडों को बनाए रखना
  • GET पैरामीटर का उपयोग किए बिना @ViewScoped सेम के बीच किसी वस्तु को पास करें