2011-06-10 19 views
6

पर एक संग्रह पास करना मैं एक कस्टम जेएसपी टैग को लागू करने की कोशिश कर रहा हूं जो वस्तुओं के Collection गुण के रूप में स्वीकार करता है और उन्हें JSON- स्वरूपित सरणी के रूप में आउटपुट करता है (Collection में प्रत्येक ऑब्जेक्ट प्रदान करता है getJsonString() विधि जो उस ऑब्जेक्ट का JSON- स्वरूपित प्रतिनिधित्व देता है)। मैं अपने टैग जैसे लागू कर दिया है:जेएसपी/जेएसटीएल: एक कस्टम टैग

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ attribute name="objects" required="true" rtexprvalue="true" %> 
<c:set var="output" value="" /> 
<c:forEach var="obj" items="${objects}"> 
    <c:if test="${! empty showComma}"> 
     <c:set var="output" value="${output}, " /> 
    </c:if> 
    <c:set var="output" value="${output}${obj.jsonString}" /> 
    <c:set var="showComma" value="yes" /> 
</c:forEach> 
[${output}] 

... और मुझे कुछ ऐसा करने से इसका इस्तेमाल करने में सक्षम होना चाहते:

<myTaglib:jsonArray objects="${myCollection}" /> 

जब मैं टैग का उपयोग करने हालांकि, कोशिश, मैं एक स्टैक ट्रेस कहावत मिल:

javax.el.PropertyNotFoundException: Property 'jsonString' not found on type java.lang.String 

तो यह ${obj.jsonString} अभिव्यक्ति के बारे में शिकायत है, लेकिन मैं निश्चित रूप से तार का एक Collection गुजर नहीं कर रहा हूँ। इसके अलावा, अगर मैं इसे ${obj} में बदलता हूं तो मुझे सही ऑब्जेक्ट प्रकार आउटपुट दिखाई देते हैं, और यदि मैं अपने कस्टम टैग के लिए जेएसपी में कोड कॉपी/पेस्ट करता हूं जहां मैं इसका उपयोग करना चाहता हूं, तो यह सही तरीके से काम करता है, इसलिए मुझे यकीन नहीं है यहाँ क्या चल रहा है।

मुझे लगता है कि मैं Collection को कस्टम टैग में कैसे पास कर रहा हूं, इस बारे में कुछ समस्या है, लेकिन मैं यह नहीं कर सकता कि यह क्या है। कोई विचार?

उत्तर

6

मैं समाधान नहीं मिला, मैं विशेषता घोषणा करने के लिए type="java.util.Collection" जोड़ने के लिए, के रूप में की जरूरत:

<%@ attribute name="objects" required="true" rtexprvalue="true" type="java.util.Collection" %> 

... मैं सोचा होगा जावा बहुत चालाक अपने आप ही है कि यह पता लगाने की होगी, लेकिन जाहिरा तौर पर नहीं।

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