Estoy tratando de implementar una etiqueta JSP personalizada que acepte como un atributo un Collection
de objetos y los muestre como una matriz con formato JSON (cada objeto en el Collection
proporciona un getJsonString()
método que devuelve una representación con formato JSON de ese objeto). mi etiqueta He implementado como tal:JSP/JSTL: Pasando una colección a una etiqueta personalizada
<%@ 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}]
... y yo quiero ser capaz de utilizarlo haciendo algo como:
<myTaglib:jsonArray objects="${myCollection}" />
Cuando trato de usar la etiqueta, sin embargo, obtener un dicho seguimiento de la pila:
javax.el.PropertyNotFoundException: Property 'jsonString' not found on type java.lang.String
por lo que es quejarse de la expresión ${obj.jsonString}
, pero definitivamente no estoy pasando un Collection
de cadenas. Además, si lo cambio a ${obj}
, veo los tipos de objetos correctos que se imprimen, y si copio/pego el código de mi etiqueta personalizada en el JSP donde quiero usarlo, funciona correctamente, así que no estoy seguro Que está pasando aqui.
Supongo que hay algún problema con la forma en que paso el Collection
en la etiqueta personalizada, pero no sé cuál es. ¿Algunas ideas?