2011-06-10 18 views
6

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?

Respuesta

6

he encontrado la solución, que tenía que añadir type="java.util.Collection" a la declaración de atributo, como en:

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

... yo habría pensado que Java sería lo suficientemente inteligente como para darse cuenta de eso por sí solo, pero aparentemente no.

Cuestiones relacionadas