6

Collectionオブジェクトの属性aを受け入れ、それらをJSON形式の配列として出力するカスタムJSPタグを実装しようとしています(の各オブジェクトは、そのオブジェクトのJSON形式の表現を返すメソッドをCollection提供します)。getJsonString()私は自分のタグをそのように実装しています:

<%@ 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思いますが、それが何であるかを理解できません。何か案は?

4

1 に答える 1

6

私は解決策を見つけました。次のようtype="java.util.Collection"に、属性宣言に追加する必要がありました。

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

... Javaはそれ自体でそれを理解するのに十分賢いと思っていたでしょうが、明らかにそうではありません。

于 2011-06-10T01:12:17.050 に答える