jsf - JSTL c :forEach does not iterate through a collection

标签 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 中的一个集合。我已经尝试了所有我能想到的方法,但不知道接下来该尝试什么。

最佳答案

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

你有两个选择:

  1. 使用 ${}符号代替。您应该只保证该 bean 已经存在于范围内。 ${}表示法即不会自动创建托管 bean(#{} 会这样做)。

  2. 升级到 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/

相关文章:

java - 两个 <h :commandButton> in a <h:form>, 一个有效,一个无效

jsf - Spring/JSF 项目中的 OmniFaces 不检索枚举属性

java - 如果输入的用户是简单用户或管理员,则隐藏 jsp 页面中的代码

jsp - 在 JSP JSTL 的哪个阶段进行评估?

ajax - 带有 RemoteCommand 的 PF Dialog 框架

jsf - 如何显示p :fileUpload invalidFileMessage in p:growl

java - 动态生成的选择标签选项未被jquery过滤

Java Web 应用程序属性

java - UIViewRoot 为空 ADF_FACE-30179

grails - 在 GSP 中使用 JSTL 标签