Я пытаюсь реализовать собственный тег JSP, который принимает в качестве атрибута Collection
объектов и выводит их в виде массива в формате JSON (каждый объект в коллекции
предоставляет метод 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, где я хочу его использовать, он работает. правильно, поэтому я действительно не уверен, что здесь происходит.
Я предполагаю, что существует некоторая проблема с тем, как я передаю коллекцию
в настраиваемый тег, но я не могу понять, что это такое. Есть идеи?