我正在尝试实现一个自定义 JSP 标记,该标记接受Collection
对象的属性 a 并将它们输出为 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
到自定义标签中存在一些问题,但我无法弄清楚它是什么。有任何想法吗?