gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:49:11 24 4
gpt4 key购买 nike

有没有人知道为什么这段代码会起作用:

<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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com