दिलचस्प पोस्ट
पेंडस मल्टी इंडेक्स के स्तर को अपने डेटाफ़्रेम को टुकड़े टुकड़े करने के बाद कैसे अपडेट कर सकते हैं? विंडो बैच फ़ाइल में सबस्ट्रिंग को कैसे बदलें जीजीप्लोट 2 पीडीएफ आउटपुट में यूनिकोड वर्ण पीएचपी रीजॉक्सपी पैटर्न में अतिरिक्त बैकस्लैश आवश्यक है द्विआधारी फ़ाइलें दूषित – कैसे AngularJS के साथ बाइनरी फ़ाइलें डाउनलोड करें "+ N" मान स्टैक ट्रेस में किसी विधि नाम के अंत में क्या मतलब है? उपयोगकर्ता परिभाषित वर्ग की वस्तुओं की एक सूची छपाई तेजी से समय बीत चुका है सी / सी ++ मैक्रो स्ट्रिंग कंसैनेटेशन कॉलबैक जब CSS3 के संक्रमण खत्म होता है वेब-क्लाइंट अनुरोध के लिए यूजर-एजेंट हेडर सेट करना UIButton छवि + पाठ IOS क्या पैरामीट्रैक्टेड एसक्यूएल कॉमांड का उपयोग करके मेरे प्रोग्राम को एसक्यूएल इंजेक्शन से बचाया जा सकता है? निष्क्रिय यूनियन सदस्य और अपरिभाषित व्यवहार तक पहुंच? अनारक्षित बफ़र्स के साथ वेक्टरिंग: VMASKMOVPS का उपयोग करना: मिसाइलमेंटमेंट गिनती से एक मास्क उत्पन्न करना? या उस सभी का उपयोग न करें

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

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

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

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

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

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

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

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