Question

Je suis en train de mettre en œuvre une coutume balise JSP qui accepte comme attribut un Collection d'objets et de sorties eux comme un tableau au format JSON (chaque objet dans le Collection fournit une méthode de getJsonString() qui retourne une représentation au format JSON de cette objet). J'ai mon tag mis en œuvre en tant que tel:

<%@ 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}]

... et je veux être en mesure de l'utiliser en faisant quelque chose comme:

<myTaglib:jsonArray objects="${myCollection}" />

Lorsque je tente d'utiliser la balise, cependant, je reçois une trace de la pile en disant:

javax.el.PropertyNotFoundException: Property 'jsonString' not found on type java.lang.String

Il se plaint de l'expression de ${obj.jsonString}, mais je ne suis certainement pas passer un Collection de chaînes. De plus, si je change à ${obj} je vois les types d'objets corrects étant sortie, et si je copier / coller le code de mon étiquette personnalisée dans la JSP où je veux l'utiliser, il fonctionne correctement, donc je ne suis vraiment pas sûr que se passe t-il ici.

Je suppose qu'il ya un problème avec la façon dont je passe la Collection dans la balise personnalisée, mais je ne peux pas travailler ce qu'il est. Toutes les idées?

Était-ce utile?

La solution

J'ai trouvé la solution, je besoin d'ajouter type="java.util.Collection" à la déclaration d'attribut, comme dans:

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

... je l'aurais pensé Java serait assez intelligent pour que sur lui-même, mais apparemment pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top