【发布时间】:2011-09-12 03:35:59
【问题描述】:
我正在尝试实现一个自定义 JSP 标记,该标记接受对象的 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},我会看到正确的对象类型正在输出,如果我将自定义标签的代码复制/粘贴到我想要使用它的 JSP 中,它可以正常工作,所以我真的不知道这里发生了什么。
我认为我将Collection 传递到自定义标签的方式存在一些问题,但我无法弄清楚它是什么。有什么想法吗?
【问题讨论】:
标签: jsp jstl jsp-tags custom-tag