有没有人知道为什么这段代码会起作用:
<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 中的一个集合。我已经尝试了所有我能想到的方法,但不知道接下来该尝试什么。
最佳答案
#{}
符号来自统一的 EL。这仅在 JSTL 1.2 中受支持。您的 JSTL namespace URI 与您正在使用 JSF 的事实相结合表明您实际上正在使用 JSTL 1.1。
你有两个选择:
使用
${}
符号代替。您应该只保证该 bean 已经存在于范围内。${}
表示法即不会自动创建托管 bean(#{}
会这样做)。升级到 JSTL 1.2。下载链接和详细信息可以在our JSTL wiki page中找到.不要忘记将 XML namespace URI 更改为
http://java.sun.com/jsp/jstl/core
.
不用说,选项 2 是首选。你应该禁止 ${}
从您的 JSF 页面。
另见:
作为一个完全不同的替代方案,您也可以只使用 Facelets 自己的 <ui:repeat>
而不是 <c:forEach>
.但是,您应该了解 Facelets 在 View 渲染期间运行和 JSTL 在 View 构建期间运行的主要区别。另见 JSTL in JSF2 Facelets... makes sense?
关于jsf - JSTL c :forEach does not iterate through a collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197016/