मुझे h का उपयोग कब करना चाहिए: h के बजाय outputLink: कमांडलाइंक?


129

जब मैं एक के <h:outputLink>बजाय का उपयोग करना चाहिए <h:commandLink>?

मैं समझता हूं कि एक commandLinkHTTP पोस्ट उत्पन्न करता है; मैं अनुमान लगा रहा हूं कि outputLinkHTTP हो जाता है। उस ने कहा, जेएसएफ ट्यूटोरियल सामग्री मैंने पढ़ा है का उपयोग करता है commandLink(लगभग?) विशेष रूप से।

संदर्भ: मैं एक छोटे से डेमो प्रोजेक्ट को लागू कर रहा हूं जो एक उपयोगकर्ता पृष्ठ के लिए एक हेडर लिंक दिखाता है, जो स्टैक ओवरफ्लो की तरह है ...

अधिक jquery की जरूरत है

... और मुझे यकीन नहीं है कि commandLink(शायद ?faces-redirect=trueबुकमार्क के लिए उपयोग कर रहा है) या outputLinkसही विकल्प है।

जवाबों:


195

<h:outputLink>एक fullworthy एचटीएमएल renders <a>में उचित यूआरएल के साथ तत्व hrefविशेषता है जो एक बुकमार्क योग्य GET अनुरोध सक्रिय करता है। यह सीधे प्रबंधित बीन एक्शन विधि को लागू नहीं कर सकता है।

<h:outputLink value="destination.xhtml">link text</h:outputLink>

<h:commandLink>एक HTML renders <a>एक साथ तत्व onclickस्क्रिप्ट जो एक (छुपा) पोस्ट प्रपत्र सबमिट करता है और एक कामयाब सेम कार्रवाई विधि आह्वान कर सकते हैं। इसे भी अंदर रखना आवश्यक है <h:form>

<h:form>
    <h:commandLink value="link text" action="destination" />
</h:form>

?faces-redirect=trueपर पैरामीटर <h:commandLink>, जो पोस्ट के बाद एक रीडायरेक्ट से चलाता है (के अनुसार उत्तर-पुनर्निर्देशन-जाओ (अब और यूआरएल नहीं होगा "के पीछे एक") जब लिंक वास्तव में क्लिक किया जाता है, केवल लक्ष्य पेज के bookmarkability को बेहतर बनाता है पैटर्न) , लेकिन यह एक पूर्ण URL होने hrefके लिए <a>तत्व का परिवर्तन नहीं करता है । यह अभी भी बना हुआ है #

<h:form>
    <h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>

JSF 2.0 के बाद से, <h:link>URL के बजाय व्यू आईडी (नेविगेशन केस परिणाम) ले सकते हैं। यह एक HTML <a>तत्व और साथ ही उचित URL जनरेट करेगा href

<h:link value="link text" outcome="destination" />

तो, अगर यह शुद्ध और बुकमार्क करने योग्य पेज-टू-पेज नेविगेशन जैसे एसओ उपयोगकर्ता नाम लिंक के लिए है, तो उपयोग करें <h:outputLink>या <h:link>। यह भी एसईओ के लिए बेहतर है क्योंकि बॉट आमतौर पर POST फॉर्म और न ही JS कोड को सिफर नहीं करता है। इसके अलावा, UX में सुधार किया जाएगा क्योंकि अब पृष्ठ बुकमार्क किए जा रहे हैं और URL अब "एक पीछे" नहीं है।

जब आवश्यक हो, आप कंस्ट्रक्टर में प्रीप्रोसेसिंग काम कर सकते हैं या @PostConstructएक @RequestScopedया @ViewScoped @ManagedBeanजो प्रश्न में गंतव्य पृष्ठ से जुड़ा हुआ है। आप जीईटी मापदंडों को सेम गुणों के रूप में सेट करने के लिए उपयोग कर सकते हैं @ManagedPropertyया कर सकते <f:viewParam>हैं।

यह सभी देखें:


2
नहीं, होना नहीं चाहिए। केवल UICommandएक UIFormघटक को एक घटक में जाने की आवश्यकता है ।
बालुसक

3
कोई नहीं, वास्तव में। आम तौर पर, जब आप लिंक के लिए h:outputLinkया उससे चिपक सकते हैं h:link। SEO को कम करके नहीं आंका जाना चाहिए। वैसे, SO पर यहाँ के अच्छे REST- जैसे URL के लिए, सुंदर स्थानों पर एक नज़र है ।
बालुस सी सी

1
नहीं है, अंतर यह है कि है h:linkलेता है JSF दृश्य आईडी (उदाहरण के लिए pageमान के रूप में) और h:outputLink(जैसे एक वास्तविक URL लेता है /page.xhtmlया /page.jsfअपने पर, या अन्य आधार पर FacesServletमूल्य के रूप में मानचित्रण)। URL एन्कोडिंग वैसे भी दोनों मामलों में होता है। इस तरह से टेम्पलेट पाठ में ईएल के प्रस्तुत व्यवहार के बीच कोई अंतर नहीं है #{...}और h:outputText। दोनों पूर्वनिर्धारित XML संस्थाओं से बच जाते हैं (नहीं, यह URL एन्कोडिंग के समान नहीं है)। h:outputTextकेवल प्रदान करता है और अधिक attribtues चाहते id, styleClass, आदि घटक और / या मार्कअप नियंत्रित करने के लिए।
बालुसक

1
@BalusC वास्तव में आपके जवाब की पहली पंक्ति में "फुलवर्थ HTML" से क्या मतलब है?
गीक

1
@ गीक: सिर्फ टू-द-पॉइंट वन एचटीएमएल <a>एलिमेंट, इससे ज्यादा कुछ नहीं, कोई
फैन्सीनेस

4

मैं यह भी देखता हूं कि पेज लोडिंग (प्रदर्शन) को h: कमांड के बजाय h: लिंक का उपयोग करने में लंबा समय लगता है। एच: लिंक एच की तुलना में तेज है: कमांडलिंक


1
मेरे लिए इस पर भरोसा करना मुश्किल है। सुनने के अलावा / अपने स्वयं के महत्वपूर्ण साक्ष्य के साथ, क्या आपके पास समर्थन करने के लिए कुछ भी है?
मैट बॉल

5
@ मैट: मैं कल्पना कर सकता हूं कि जब आप एक पृष्ठ में "भगवान" रूप में इस पोस्ट पोस्ट नेविगेशन लिंक के साथ धीमी हो जाती है, उदाहरण के लिए एक datatable> 1000 पंक्तियों जिसमें प्रति पंक्ति 3 इनपुट फ़ील्ड हैं। लेकिन इस तरह के एक पृष्ठ में वैसे भी अन्य गंभीर समस्याएं हैं :)
BalusC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.