2011-06-10 65 views
6

我試圖實現一個自定義JSP標記,它接受對象的屬性Collection並將它們輸出爲JSON格式的數組(Collection中的每個對象都提供了一個getJsonString()方法返回該對象的JSON格式的表示)。我有我的標籤實現爲這樣:JSP/JSTL:將集合傳遞給自定義標記

<%@ 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},則會看到正在輸出的對象類型正確,如果我將自定義標記的代碼複製/粘貼到JSP中要使用的代碼中,它會正常工作,所以我確實不確定這裏發生了什麼。

我認爲我將Collection傳遞給自定義標記存在一些問題,但我無法弄清楚它是什麼。有任何想法嗎?

回答

6

我找到了解決辦法,我需要添加type="java.util.Collection"的屬性聲明,如:

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

...我本來以爲的Java將足夠聰明去弄清楚自身,但顯然不是。

相關問題