2011-08-17 13 views
10

अगर मैं कार्य करें:क्या एक जेएसपी टैग फ़ाइल जेएसपी के पेज कॉन्टेक्स्ट को कॉल कर सकती है?

<% pageContext.setAttribute("foo", "bar"); %> 
<custom:myTag/> 

ऐसा लगता है जैसे मैं ऐसा करने में सक्षम होना चाहिए:

<%= pageContext.getAttribute("foo") %> 

myTag.tag के अंदर ... लेकिन निश्चित रूप से मैं नहीं कर सकता क्योंकि टैग फ़ाइल नहीं करता है पेज कॉन्टेक्स्ट तक पहुंच नहीं है (इसके बजाय इसमें एक jspContext तक पहुंच है ... जिसमें कॉलिंग पेज के पेज कॉन्टेक्स्ट के समान गुण नहीं हैं)।

${pageContext} 

लेकिन यह मदद नहीं करता है क्योंकि ELScript तर्क पास करने का कोई तरीका नहीं है, तो आप ऐसा नहीं कर सकते:

अब, आप ELScript के माध्यम से pageContext उपयोग कर सकते हैं

${pageContext.getAttribute("foo")} 

हालांकि, तथ्य यह है कि ईएलस्क्रिप्ट पृष्ठ संदर्भ तक पहुंच सकता है, और तथ्य यह है कि टैग jspContext जैसे सभी प्रकार के चरों तक पहुंच सकता है, कि किसी टैग को एक्सेस करने के लिए कुछ तरीका होना चाहिए (स्क्रिप्टलेट/जावा तर्क तरीके से, न केवल इन ईएलस्क्रिप्ट) जेएसपी के पेज कॉन्टेक्स्ट को कॉल करने से एक विशेषता।

क्या वहां है?

उत्तर

7

ईएल के रूप में, ${pageContext.getAttribute("foo")} केवल ईएल 2.2 में काम करता है। इससे पहले सही वाक्यविन्यास ${pageContext.foo} या सिर्फ ${foo} है। हमारे EL wiki page भी देखें।

हालांकि, ${pageContext} मूल जेएसपी फ़ाइल और जेएसपी टैग के बीच साझा नहीं किया गया है। प्रत्येक का अपना उदाहरण है।

आप कर सकते थे या तो बजाय अनुरोध विशेषता के रूप में सेट:

<% request.setAttribute("foo", "bar") %> 
<custom:myTag /> 

टैग में

<%= request.getAttribute("foo") %> 

या, साथ ईएल

${requestScope.foo} 

या

साथ 10
${foo} 

या, बेहतर, आप टैग

<%@attribute name="foo" required="true" %> 
${pageContext.foo} 

या सिर्फ

<%@attribute name="foo" required="true" %> 
${foo} 
+0

धन्यवाद, लेकिन बात यह है कि, मुझे पहले से ही वेरिएक्स्ट में इच्छित चर मिल चुके हैं, और पर्याप्त (विरासत) कोड जो उन्हें संदर्भित करता है कि मैं उन्हें विशेषताओं के अनुरोध के लिए बदलना नहीं चाहता हूं। इसलिए मैं अनुरोध में डुप्लिकेट प्रतियां भी डाल सकता हूं, लेकिन मुझे उम्मीद थी कि ऐसा करने का कोई और तरीका था। ओह, और इन चरों को बहुत सारे टैग में बहुत कम किया जा रहा है यदि मैं उन्हें गुण देता हूं, तो मैं वास्तव में "दृश्यों के पीछे" समाधान की उम्मीद कर रहा था। यदि टैग से जेएसपी के पेज कॉन्टेक्स्ट तक पहुंचने के लिए कोई रास्ता नहीं है ... अनुमान है कि मैं भाग्य से बाहर हूं :-( – machineghost

+0

आप वास्तविक पेज संदर्भ (पेजकॉन्टेक्स्ट) getJspContext() के साथ केवल वास्तविक पृष्ठ संदर्भ तक पहुंच सकते हैं। नीचे मेरा उत्तर देखें। –

+0

@ जेसन: सवाल उस बारे में नहीं था। – BalusC

1

में ऐसा लगता है कि में एक fullworthy टैग विशेषता

<custom:myTag foo="bar" /> 

के रूप में यह निकल सकती है वेबलोगिक 10 कम से कम, निहित "एप्लिकेशन" ऑब्जेक्ट टैग फ़ाइलों में उपलब्ध है, और उदाहरण ServletContext है। शायद इसका उपयोग करें, जब यह वास्तव में ServletContext है जो कि बाद में है, और जरूरी नहीं कि उच्च स्तरीय पृष्ठ कॉन्टेक्स्ट।

संबंधित मुद्दे