【问题标题】:JSP/JSTL: Passing a Collection to a Custom TagJSP/JSTL:将集合传递给自定义标记
【发布时间】:2011-09-12 03:35:59
【问题描述】:

我正在尝试实现一个自定义 JSP 标记,该标记接受对象的 Collection 作为属性并将它们输出为 JSON 格式的数组(Collection 中的每个对象都提供了一个 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 中,它可以正常工作,所以我真的不知道这里发生了什么。

我认为我将Collection 传递到自定义标签的方式存在一些问题,但我无法弄清楚它是什么。有什么想法吗?

【问题讨论】:

    标签: jsp jstl jsp-tags custom-tag


    【解决方案1】:

    我找到了解决办法,我需要在属性声明中添加type="java.util.Collection",如:

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

    ...我原以为 Java 会足够聪明,可以自己解决这个问题,但显然不是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2012-06-10
      • 2015-02-25
      相关资源
      最近更新 更多