有没有人知道,为什么这段代码会起作用:
<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中的一个集合。我已经尝试了所有我能想到的东西,并且不知道下一步该尝试什么。
答案 0 :(得分:5)
#{}
符号来自统一的EL。这仅在JSTL 1.2中受支持。您的JSTL名称空间URI与您使用JSF的事实相结合表明您实际上正在使用JSTL 1.1。
您有两个选择:
请改用${}
表示法。您应该只保证bean已经存在于范围中。 ${}
表示法不会自动创建托管bean(#{}
会这样做。)
升级到JSTL 1.2。可以在our JSTL wiki page中找到下载链接和详细信息。不要忘记将XML名称空间URI更改为http://java.sun.com/jsp/jstl/core
。
不用说选项2是首选。你应该从你的JSF页面禁止${}
。
作为完全不同的替代方案,您也可以使用Facelets自己的<ui:repeat>
代替<c:forEach>
。但是,您应该了解Facelets在视图渲染时运行的主要区别,以及JSTL在视图构建期间运行。另请参阅JSTL in JSF2 Facelets... makes sense?