gpt4 book ai didi

JSP/JSTL : Passing a Collection to a Custom Tag

转载 作者:行者123 更新时间:2023-12-03 05:09:37 26 4
gpt4 key购买 nike

我正在尝试实现一个自定义 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 传递到自定义标记中的方式存在一些问题,但我无法弄清楚它是什么。有什么想法吗?

最佳答案

我找到了解决方案,我需要将 type="java.util.Collection" 添加到属性声明中,如下所示:

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

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

关于JSP/JSTL : Passing a Collection to a Custom Tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6300814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com