2010-11-10 7 views
5

के बीच ईएल संदर्भ पथ मूल्यांकन अंतर मैं अपने ऐप में एक सहायता दस्तावेज़ प्राप्त करने के लिए निम्न का उपयोग कर रहा हूं। मेरी समस्या यह है कि <h:graphicImage> संदर्भ पथ का सही ढंग से मूल्यांकन करता है, h:outputLink इसे कुछ भी नहीं करता है। मैंने $ और # दोनों को h:outputLink में उपयोग करने का प्रयास किया है क्योंकि मुझे लगता है कि उनके पास अलग-अलग मूल्यांकन समय हैं।आउटपुट लिंक और ग्राफ़िक इमेज

दो ईएल अभिव्यक्तियों का मूल्यांकन करने में क्या अंतर है?

<h:outputLink value="${pageContext.servletContext.contextPath}/services/help.pdf"> 
    <h:graphicImage 
     url="${pageContext.servletContext.contextPath}/images/help.png" 
     alt="Online Help"/> 
</h:outputLink> 

उत्तर

15

संदर्भ पथ में प्रकट नहीं होता है कि जाँच में मदद कर सकते <h:outputLink> सुझाव देता है कि आप वास्तव में जेएसपी के बजाय फेसलेट का उपयोग कर रहे हैं। ${pageContext} फेसलेट्स में बिल्कुल मौजूद नहीं है। यह विरासत जेएसपी के लिए विशिष्ट है। दोनों अभिव्यक्तियों ने अभी एक खाली स्ट्रिंग का मूल्यांकन किया है। इस प्रकार उनके बीच कोई अंतर नहीं है।

कि संदर्भ पथ <h:graphicImage> में पूरी तरह से अपेक्षित है। यह स्वचालित रूप से घटक द्वारा स्वयं शामिल है। वास्तव में, पूरी अभिव्यक्ति अनिवार्य है और निम्नलिखित को अच्छे के रूप में काम करना चाहिए।

<h:graphicImage url="/images/help.png" alt="Online Help"/> 

<h:outputLink> वास्तव में नहीं स्वचालित रूप से संदर्भ पथ शामिल है। केवल <h:link> ऐसा करता है। आपको इसे स्वयं शामिल करना होगा। फेसलेट्स में, आप का उपयोग HttpServletRequest पर हैंडल प्राप्त करने के लिए कर सकते हैं, जिसके बदले में getContextPath() भी है (और जिसे कवर के तहत <h:graphicImage> द्वारा उपयोग किया जाता है)।

<h:outputLink value="#{request.contextPath}/services/help.pdf"> 
+0

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

+0

यह फेसलेट्स में बिल्कुल मूल्यांकन नहीं करेगा। यह 'एच: ग्राफिक इमेज 'है जो संदर्भ पथ को स्वयं जोड़ता है। – BalusC

3

{facesContext.externalContext.requestContextPath} इस # प्रयास करें मैं आशा है कि यह आप भी इस लिंक link text

सादर, सर्जियो Valdez

+0

आपको अपने उत्तर पर विस्तार करने की आवश्यकता है। मुझे यह कहां कोशिश करनी चाहिए? '#' क्या अंतर करता है? 'RequestContextPath' और' contextPath' 'के बीच क्या अंतर है? – Adam

+0

'#' का उपयोग जेएसएफ द्वारा '$ 'के बजाय ईएल घोषित करने के लिए किया जाता है जिसका उपयोग स्टैंडर जेएसपी' # 'में किया जाता है जिसे जेएसएफ द्वारा पसंद किया जाता है लेकिन आप अभी भी' $ 'का उपयोग कर सकते हैं, आपको यह जांचना होगा कि आप किस ऑब्जेक्ट का उपयोग कर सकते हैं' faceContext.externalContext' अनुरोध अब जेएसएफ द्वारा प्रबंधित किया जाता है। –

+2

'# {request.contextPath} 'छोटा है। – BalusC