【问题标题】:JSTL forEach not working in custom tagJSTL forEach 在自定义标签中不起作用
【发布时间】:2025-12-08 12:40:01
【问题描述】:

我的班级:

public class CustomObject {
    private String name;

    public String getName() {
        return "test";
    }
}

请求:

List<CustomObject> items = new ArrayList<CustomObject>();
items.add(new CustomObject());
request.setAttribute( "items", items );

这个例子在我的 jsp 中工作:

<div class="container">
    <c:forEach items="${items}" var="item">
      ${item.name}
    </c:forEach>

但是当我使用自定义标签时返回错误。为什么不读取属性?

<%@ attribute name="list" required="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:if test="${!empty list}">
   <c:forEach var="item" items="${list}">
        <li><c:out value="${item.name}"/></li>
    </c:forEach>
</c:if>

控制台:

原因:javax.el.PropertyNotFoundException:类 'java.lang.String' 没有属性 'name'。

【问题讨论】:

    标签: java jsp jakarta-ee jstl el


    【解决方案1】:

    指定属性类型,不指定list属性类型默认为String

    &lt;%@ attribute name="list" required="true" type="java.util.List" %&gt;

    【讨论】:

    • 您能说得更具体些吗?如果您担心类型安全,我不确定您为什么使用 jstl
    • 我只是想知道是否可以指定属性中使用的类,所以当我重命名它时我不必记得在 jsp 中更改它,但后来我意识到你指定只有属于 java sdk 的集合类型,在这种情况下你永远不会重命名它(dohhhhh)。忘记我说的话。