दिलचस्प पोस्ट
एकाधिक मॉडल एडमिन / Django व्यवस्थापक में एक ही मॉडल के लिए विचार चेक करें कि क्या कुकी सक्षम हैं जावा में XPath का उपयोग करते हुए XML को कैसे पढ़ा जाए प्रश्न सेलेक्टर्स सब क्या करें, GetElementsByClassName और अन्य getElementsÃÆ'Ã? एक € ™ Ã⠀ SA, जेएसपी पृष्ठ में एक डेटाबेस से छवियों को कैसे प्राप्त और प्रदर्शित करना है? मैं एंड्रॉइड। नेट। नेटवर्कऑनमैनथ्रेड अपवाद कैसे तय करूं? जीआईटी मर्ज – स्क्वाश का उपयोग कैसे करें? WPF में, एक्स: नाम और नाम के गुणों के बीच अंतर क्या हैं? अगर एक डबल (या फ्लोट) सी ++ में NaN है, तो जांचना क्रिया फ़िल्टर विशेषता से पुनर्निर्देशन PHP के साथ एसएफटीपी कैसे करें? MySQL 1093 त्रुटि – एफआरएम खंड में अद्यतन के लिए लक्ष्य तालिका को निर्दिष्ट नहीं कर सकता कोणीय का उपयोग करके ब्राउज़र बैक बटन क्लिक ईवेंट का पता कैसे लगा सकता है? पहलू अनुपात और चौड़ाई को रखने के द्वारा UIImage का आकार बदलें एंड्रॉइड एप्लिकेशन में उपयोगकर्ता सेटिंग्स को स्टोर करने का सबसे उपयुक्त तरीका क्या है

कैसे 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 सेम के बीच किसी वस्तु को पास करें