【问题标题】:JSTL forEach tag not iteraring over collection [duplicate]JSTL forEach 标记不迭代集合 [重复]
【发布时间】:2016-02-19 12:05:23
【问题描述】:

我在创建 jsp 文件时遇到了一些问题。我想使用 JSTL 以某种方式显示集合。首先,我在我的 jsp 中创建了一个 java 代码:

<% for(int i = 0; i < ((List<BookPosition>)request.getAttribute("books")).size(); i+=1) { %>  
        <label>Test</label>
<% } %>

然后,我创建了一个 JSTL sn-p。

<c:forEach var="book" items="$(books)">
        <label>Test</label>
</c:forEach>

不幸的是,第一个输出正确数量的标签 (24),而 JSTL 版本只有一个标签(尽管该集合包含 24 个项目)。

为什么?

【问题讨论】:

  • 你认为$(books)代表什么?你为什么这么认为?
  • 不知道。我是 JSP / JSTL 的新手,发现了一些 sn-ps,在 servlet 端我应该设置:request.setAttribute("books", myBookCollection);,使用调度程序将请求转发到 jsp,然后循环应该可以工作。 F.e:stackoverflow.com/a/4255741/5417374
  • 看起来您使用的是括号 () 而不是花括号 {} - 试试 ${books}
  • 我在任何地方都看不到符号$()。检查语法。我投票结束,因为错字。
  • 是的..括号...我忽略了。

标签: java jsp jstl


【解决方案1】:

EL expressions 是这样写的:${ myExpression }

<c:forEach var="book" items="${ books }">
        <label>Test</label>
</c:forEach>

现在,如果您还想跟踪打印值的数量,您可以在 JSTL 核心标记中使用带有 varStatus 属性的计数器:

<c:forEach var="book" items="${ books }" varStatus="counter">
        <label><c:out value="${ counter.count }"/>. Test</label>
</c:forEach>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-28
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2018-11-18
    • 1970-01-01
    相关资源
    最近更新 更多