2012-11-21 34 views
14

मेरे पास एक जेएसपी फ़ाइल है जिसमें एक और जेएसपी फ़ाइल शामिल है। पहले जेएसपी को दूसरी कक्षा जेएसपी फ़ाइल में जावा क्लास (विजेट) का एक उदाहरण पास करना चाहिए।jsp: जावा क्लास के साथ param

पहले JSP:

<jsp:include page="/container/SpecialWidget.jsp"> 
    <jsp:param name="widget" value="${widget}"/> // widget is a .Java POJO 
</jsp:include> 

दूसरा JSP:

यह है कि मैं क्या है

${param.widget.id} 

समस्या यह है कि इस कोड (एक त्रुटि यह ऐसा नहीं कहते हैं देता है आईडी नहीं पता)। अगर मैं ".id" भाग को छोड़ देता हूं, तो पृष्ठ जावा क्लास के लिए जावा कोड प्रिंट करता है, जिसका अर्थ है कि कक्षा को सही तरीके से स्थानांतरित कर दिया गया है। यदि मैं पहले पृष्ठ के $ {widget} नियम को बदलता हूं, उदाहरण के लिए, $ {widget.id} और मैं $ {param.widget} प्रिंट करने का प्रयास करता हूं, तो सब कुछ ठीक काम करता है।

मेरा प्रश्न: मैं जावा क्लास क्यों पास नहीं कर सकता और सीधे इसके गुणों पर कॉल क्यों कर सकता हूं? मैं क्या गलत कर रहा हूं?

संपादित करें: त्रुटि संदेश: javax.el.PropertyNotFoundException: की वजह से संपत्ति 'आईडी' प्रकार java.lang.String पर नहीं मिला

उत्तर

9

जब आप पारित परिवर्तनीय ${widget} इसे एक स्ट्रिंग (widget.toString()) के अनुरोध समय पर अनुवादित किया गया है। यह मान तब दूसरी जेएसपी को स्ट्रिंग के रूप में पारित किया जाता है, न कि मूल जावा ऑब्जेक्ट के रूप में। वस्तु के मूल्यों का उपयोग करने की

एक दृष्टिकोण विशेषता के मूल्य के साथ पैरामीटर का मान सेट कर रहा है:

${param.widgetId} 

तुम भी विजेट सेट कर सकते हैं:

<jsp:param name="widgetId" value="${widget.id}"/> 

तो दूसरा JSP पर कोड bellow का उपयोग एक अनुरोध के रूप में विशेषता और इसे दूसरे पृष्ठ पर ${widget.id} या $ {request.widget.id} के रूप में उपयोग करें। मेरा सुझाव है कि आप दूसरे दृष्टिकोण का उपयोग करें।

+0

मुझे पता है कि सर्वलेट की सहायता से अनुरोध पैरामीटर कैसे सेट अप करें। मुझे नहीं पता कि इस पैरामीटर को एक फ़ाइल में कैसे पास किया जाए। क्या आप समझा सकते हैं कि यह कैसे पूरा किया जा सकता है? –

6

<jsp:param> एक HTTP अनुरोध पैरामीटर के रूप में पैरामीटर, जो केवल एक हो सकता है गुजरता स्ट्रिंग। तो toString() को आपके विजेट पर बुलाया जाता है, और इस विधि का परिणाम पैरामीटर के रूप में पारित किया जाता है।

आपको जेएसपी टैग का उपयोग करने के बजाय टैग फ़ाइल के रूप में लागू एक जेएसपी टैग का उपयोग करना चाहिए। http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html देखें कि उनका उपयोग कैसे परिभाषित किया जाए।

उदाहरण के लिए:

टैग definintion, /WEB-INF/tags/specialWidget.tag में:

<%@ tag %> 
<%@ attribute name="widget" required="true" type="the.fully.qualified.name.of.WidgetClass" %> 
TODO: add the HTML markup that must be displayed, using ${widget} to access the passed in widget attribute 

टैग के उपयोग, किसी भी JSP में:

<%@ taglib prefix="myTags" tagdir="/WEB-INF/tags" %> 
... 
Tada! I will use the specialWidget tag here, with widget as an attribute: 
<myTags:specialWidget widget="${widget}"/> 
+0

धन्यवाद बचा लिया। क्या आप इसका मूल उदाहरण दे सकते हैं कि यह कैसे काम करता है?आपके द्वारा भेजे गए लिंक का अध्ययन करने के बाद, यह पूरी तरह स्पष्ट नहीं है कि मैं अपनी समस्या के लिए इसका उपयोग कैसे कर सकता हूं। –

+0

उदाहरण के लिए मेरे संपादन देखें। –

10

मैं निम्नलिखित कोड के साथ मेरी समस्या को ठीक करने में कामयाब रहे:

<c:set var="widget" value="${widget}" scope="request" /> 
<jsp:include page="/SOMEWHERE/SpecialWidget.jsp"/> 

तुम दोनों आपकी मदद के लिए धन्यवाद :) यह आपकी मदद के लिए मेरा दिन

+0

जिस चाल ने मेरी मदद की वह स्कोप = "अनुरोध" जोड़ रहा था – jeff