2013-05-17 3 views
24

मैं welcome.jspजेएसपी में पैरामीटर कैसे पास करें: सी के माध्यम से शामिल करें: सेट? जेएसपी में चर के दायरे क्या हैं?

<c:set var="pgTitle" value="Welcome"/> 
<jsp:include page="/jsp/inc/head.jsp" /> 

पर इस राशि और head.jsp में इस:

<title>Site Name - ${pgTitle}</title> 

लेकिन चर खाली है, और उत्पादन केवल

Site Name - 

मेरे पास है कई लेख पढ़ें, और मैं यह नहीं समझ सकता कि समस्या क्या है। यदि मैं उसी स्वागत.जेएसपी के भीतर कहीं और ${pgTitle} गूंजता हूं, तो यह ठीक से आउटपुट करता है।

मैं दोनों पृष्ठों पर कोर टैग लाइब्रेरी समेत हूं।

उत्तर

31

ऐसा इसलिए है क्योंकि pgTitle चर पेज के दायरे में सेट है। इसे here देखें (क्षमा करें मुझे इसके लिए आधिकारिक दस्तावेज़ीकरण नहीं मिल सकता है)।

यदि आप यह काम करना चाहते हैं, तो आपको कम से कम अनुरोध स्कोप में चर सेट करना होगा। अनुरोध दायरे में अपने चर सेट करने के लिए, <c:set> पर scope विशेषता का उपयोग: वेब विकास में

<c:set var="pgTitle" value="Welcome" scope="request" /> 

अपनी टिप्पणी के अनुसार,, चर के दायरे में कोई फर्क है क्योंकि यह परिभाषित करता है जहां चर इस्तेमाल किया जा सकता (समान एक वर्ग में फ़ील्ड के रूप में घोषित एक चर और एक विधि में स्थानीय रूप से घोषित एक चर)। जेएसपी में चार स्कोप संदर्भ के रूप में जाना जाता है:

  • पृष्ठ स्कोप (PageContext द्वारा प्रबंधित)। वर्तमान पृष्ठ में विशेषताओं के रूप में सेट किए जाने पर चर केवल तभी पहुंचे जा सकते हैं। इसका मतलब है, केवल वर्तमान पृष्ठ इन विशेषताओं तक पहुंच सकता है, पृष्ठ शामिल हैं अलग-अलग पृष्ठ हैं, इसलिए वे इन विशेषताओं तक नहीं पहुंच सकते हैं।
  • अनुरोध का दायरा (ServletRequest द्वारा संभाला गया)। वर्तमान अनुरोध में विशेषताओं के रूप में सेट किए जाने पर चर केवल तभी पहुंचा जा सकता है। इसका मतलब है, एक ही अनुरोध में संभाला गया प्रत्येक पृष्ठ इन विशेषताओं तक पहुंच सकता है। महत्वपूर्ण नोट: एक रीडायरेक्ट एक नया अनुरोध/प्रतिक्रिया प्रक्रिया का तात्पर्य है। इसका अर्थ यह है कि, यदि आप अनुरोध पर गुण सेट करते हैं और रीडायरेक्ट निष्पादित करते हैं, तो इन विशेषताओं को नए अनुरोध पर विशेषताओं के रूप में सेट नहीं किया जाएगा।
  • सत्र का दायरा (HttpSession द्वारा संभाला गया)। वर्तमान उपयोगकर्ता सत्र में विशेषताओं के रूप में सेट किए जाने पर चर केवल तभी पहुंचा जा सकता है। इसका अर्थ यह है कि, उसी उपयोगकर्ता सत्र में उपयोग किए जाने वाले प्रत्येक पृष्ठ इन विशेषताओं का उपयोग तब तक कर सकते हैं जब तक उन्हें हटाया नहीं जाता है या सत्र समाप्त हो जाता है।
  • आवेदन का दायरा (ServletContext द्वारा संभाला गया)। वर्तमान संदर्भ में विशेषताओं के रूप में सेट किए जाने पर चर केवल तभी पहुंचे जा सकते हैं। इसका अर्थ यह है कि, प्रत्येक सत्र विशेषता पर प्रत्येक पृष्ठ इन चरों तक पहुंच सकता है जब तक कि उन्हें सत्र कॉन्टेक्स्ट से हटाया नहीं जाता है या वेब एप्लिकेशन बेरोजगार होता है।

और जानकारी:

इस सही तरीके से पूरा करने के लिए मुझे क्या करना कोशिश कर रहा हूँ है?

अगर वहाँ एक सर्वलेट या किसी अन्य नियंत्रक कि गुण अनुरोध (उदाहरण के लिए वसंत MVC या JSF से @Controller कामयाब सेम), तो विशेषता वहाँ और नहीं अपने पृष्ठ में सीधे सेट में स्थापित किया जाना संभालती है।

व्यक्तिगत रूप से, अनुभव अर्जित करने में कुछ समय लगता है और वेब अनुप्रयोगों पर उपयोग किए जाने वाले चर के सर्वोत्तम दायरे को परिभाषित करता है। बेसिक उदाहरण:

  • अल्पविराम से एक String का विभाजन प्रस्तुति प्रयोजनों के लिए केवल वर्तमान दृश्य में प्रभावित करेगा, इसलिए यह पेज दायरे में सेट किया जा सकता।
  • त्रुटि और सफल संदेश अनुरोध दायरे में सबसे उपयुक्त हैं। यदि उपयोगकर्ता पृष्ठ को अपडेट करता है, तो उसे संभवतया वही संदेश नहीं दिखना चाहिए जब तक कि डेटा पुन: संसाधित न हो जाए।
  • उपयोगकर्ता नाम, उपनाम और प्राथमिकताएं उपयोगकर्ता स्कोप में सेट की जा सकती हैं।
  • यदि आपको देशों की एक सूची प्रदर्शित करना है (जो कुछ दिनों में नहीं बदला जाना चाहिए), तो आप इस सूची को एप्लिकेशन स्कोप में स्टोर कर सकते हैं।
+0

इस तथ्य को काम में किया था। क्या मैं यहां क्या हो रहा है के बारे में एक और तकनीकी स्पष्टीकरण मांग सकता हूं? Jsp: माता-पिता के भीतर एक परिवर्तनीय सेट तक पहुंच क्यों नहीं है? अंतिम प्रश्न: क्या यह पूरा करने का सही तरीका है जिसे मैं करने की कोशिश कर रहा हूं? – vcardillo

+0

@ vcardillo उत्तर अपडेट किया गया। –

+0

सुपर सहायक। इन विवरणों को प्रदान करने के लिए समय निकालने के लिए धन्यवाद! – vcardillo

2

आपको चर (कम से कम) request स्कॉप्ड सेट करना होगा। head.jsp में

<c:set var="pgTitle" value="Welcome" scope="request"/> 
<jsp:include page="/jsp/inc/head.jsp" /> 

और फिर,, आप उत्पादन इस तरह चर कर सकते हैं:: आप इस प्रकार आईडी कर सकते हैं

<c:out value="${requestScope.pgTitle}" /> 
+0

'$ {}' के बाद से 'अनुरोधस्कोप' जोड़ने की कोई ज़रूरत नहीं है, पहले से ही सभी स्कॉप्स विशेषताओं में चर की खोज करता है। –

+0

यह आवश्यक नहीं है, लेकिन यह और अधिक स्पष्ट है। :) –

4

एक तरह से क्वेरी पैरामीटर के माध्यम से एक करने के लिए चर पारित शामिल करने के लिए है:

<jsp:include page="/WEB-INF/views/partial.jsp?foo=${bar}" /> 

<jsp:include page="/WEB-INF/views/partial.jsp"> 
    <jsp:param name="foo" value="${bar}" /> 
    <jsp:param name="foo2" value="${bar2}" /> 
</jsp:include> 

फिर आप के साथ उन लोगों पैरामीटर का उपयोग कर सकते ${param.foo}

एक और कस्टम टैग का उपयोग करने के होगा:

/WEB-INF/tags/head.tag

<%@ attribute name="title" %> 

<head> 
    <title>${title}</title> 
</head> 

somePage.jsp

<%@ taglib prefix="layout" tagdir="/WEB-INF/tags" %> 

<html> 
    <layout:head title="myRadTitle" /> 
    <body></body> 
<html/> 
संबंधित मुद्दे