Frage

Ich versuche, ein benutzerdefiniertes JSP -Tag zu implementieren, das als Attribut a akzeptiert wird Collection von Objekten und gibt sie als JSON-formatiertes Array aus (jedes Objekt in der Collection bietet a getJsonString() Methode, die eine JSON-formatierte Darstellung dieses Objekts zurückgibt). Ich habe mein Tag als solches implementiert:

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

... und ich möchte es benutzen können, indem ich so etwas wie:

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

Wenn ich jedoch versuche, das Tag zu verwenden, bekomme ich eine Stapelverfolgung mit dem Titel:

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

Es beschwert sich also über die ${obj.jsonString} Ausdruck, aber ich komme definitiv nicht ein Collection von Saiten. Außerdem, wenn ich es zu ändere ${obj} Ich sehe die korrekten Objekttypen, die ausgegeben werden, und wenn ich den Code für mein benutzerdefiniertes Tag in den JSP kopiere/einfüge, funktioniert er richtig. Ich bin mir wirklich nicht sicher, was hier vor sich geht.

Ich nehme an, es gibt ein Problem damit, wie ich das bestehe Collection in das benutzerdefinierte Tag, aber ich kann nicht herausfinden, was es ist. Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich fand die Lösung, ich musste hinzufügen type="java.util.Collection" zur Attributerklärung, wie in:

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

... Ich hätte gedacht, Java wäre klug genug, um das selbst herauszufinden, aber anscheinend nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top