JSTL c:forEach不会遍历集合

Sau*_*kas 3 jsf jstl

有谁有任何想法,为什么这个代码可以工作:

<h:outputText value="#{allocations[0].policyNumber}" />
Run Code Online (Sandbox Code Playgroud)

这段代码可以工作:

<c:forEach var="i" begin="1" end="5">
    <h:outputText value="aaa"/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

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

<c:forEach var="allocation" items="#{allocations}" >
    <h:outputText value="aaa"/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 5

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

你有2个选择:

  1. 请使用${}符号.您应该只保证bean已经存在于范围中.该${}符号即不会自动创建管理豆(在#{}做这一点).

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

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

也可以看看:


作为一个完全不同的替代方案,你也可以使用Facelets <ui:repeat>而不是<c:forEach>.但是,您应该了解Facelets在视图渲染时运行的主要区别,以及JSTL在视图构建期间运行.另请参阅JSF2 Facelets中的JSTL ......有意义吗?