JSTL c:forEach不会遍历集合

时间:2012-11-02 14:19:02

标签: jsf jstl

有没有人知道,为什么这段代码会起作用:

<h:outputText value="#{allocations[0].policyNumber}" />

并且此代码可以工作:

<c:forEach var="i" begin="1" end="5">
    <h:outputText value="aaa"/>
</c:forEach>

但是这段代码不起作用(GUI中没有任何内容):

<c:forEach var="allocation" items="#{allocations}" >
    <h:outputText value="aaa"/>
</c:forEach>

我正在使用命名空间“http://java.sun.com/jstl/core”。 allocations是java中的一个集合。我已经尝试了所有我能想到的东西,并且不知道下一步该尝试什么。

1 个答案:

答案 0 :(得分:5)

#{}符号来自统一的EL。这仅在JSTL 1.2中受支持。您的JSTL名称空间URI与您使用JSF的事实相结合表明您实际上正在使用JSTL 1.1。

您有两个选择:

  1. 请改用${}表示法。您应该只保证bean已经存在于范围中。 ${}表示法不会自动创建托管bean(#{}会这样做。)

  2. 升级到JSTL 1.2。可以在our JSTL wiki page中找到下载链接和详细信息。不要忘记将XML名称空间URI更改为http://java.sun.com/jsp/jstl/core

  3. 不用说选项2是首选。你应该从你的JSF页面禁止${}

    另见:


    作为完全不同的替代方案,您也可以使用Facelets自己的<ui:repeat>代替<c:forEach>。但是,您应该了解Facelets在视图渲染时运行的主要区别,以及JSTL在视图构建期间运行。另请参阅JSTL in JSF2 Facelets... makes sense?