3

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

<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 中的一个集合。我已经尝试了我能想到的一切,但不知道下一步该尝试什么。

4

1 回答 1

5

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

您有 2 个选项:

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

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

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

也可以看看:


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

于 2012-11-02T14:25:12.687 回答