c:forEach vs ui:repeat(又名 ice:panelSeries)

Posted

技术标签:

【中文标题】c:forEach vs ui:repeat(又名 ice:panelSeries)【英文标题】:c:forEach vs ui:repeat (a.k.a ice:panelSeries) 【发布时间】:2011-04-02 14:42:12 【问题描述】:

我试图避免使用 c:forEach,因为我听说 JSTL 不能很好地融入 JSF 的渲染阶段……我根本不确定这个说法。相反,在许多情况下,我不得不求助于使用 c:forEach 而不是 ui:repeat,因为 ui:repeate 根本不会迭代集合。这发生在很多情况下,我无法隔离原因,而且在所有情况下这些情况 c:forEach 是一个非常好的替代品。我的问题是关于 c:forEach 表现不佳的一种情况,并且 ui:repeat 没有从集合中返回任何内容(即使它以正确的次数重复装饰 html 标签)。

会发生的情况是,有时在 c:forEach 中创建的 JSF 组件分散在整个页面中,使 c:forEach 主体中的装饰 HTML 标记为空,并在页面的其他位置呈现。这种情况只会发生几次,特别是在使用 F5 进行刷新时(大多数情况下会在随后使用 Ctrl+F5 刷新时得到修复)。

我完全感到困惑,并希望对正在发生的事情有任何想法。为什么 ui:repeat (和 ice:panelSeries)没有从集合中取回值?为什么 c:forEach 散射是到处都是内容(在构建 JSf 组件树时似乎是一种竞争条件。也许渲染的应该等待 c:forEach 而它没有)?为什么只发生在这种情况下??

很抱歉,我没有包含任何代码 sn-ps 或屏幕截图,因为我不知道要包含什么......问题太笼统了。但是你可以确信我的语法是正确的……我已经检查过了……而且我没有使用状态变量(这会在 ui:repeat 中造成太多麻烦)。

【问题讨论】:

来吧..请举例说明:这种情况发生在很多情况下,我无法找出原因 【参考方案1】:

ui:repeate 根本不迭代 集合

以下代码有效:

<ui:repeat value="#myCollection" var="item">  
   <h:outputText value="#item" />
</ui:repeat>

为什么只发生在这种情况下??

没有this case 的例子很难知道..

不过,c:forEach vs ui:repeat document 可能会帮助您找到原因。

【讨论】:

以上是关于c:forEach vs ui:repeat(又名 ice:panelSeries)的主要内容,如果未能解决你的问题,请参考以下文章

c:forEach 中的绑定

使用 ui:repeat 输出 ResultSet

有条件地渲染 tr,使用 ui:repeat 构建表

ui:repeat 不适用于地图

ui:repeat 中条件渲染子类的 PropertyNotFoundException

使用 ui:repeat 访问本机查询列表