c:forEach vs ui:repeat(a.k.a ice:panelSeries)

时间:2010-08-23 11:55:34

标签: java jsf jstl facelets

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

有时会发生在c:forEach中创建的JSF组件散布在整个页面上,将装饰HTML标记留在c:forEach的主体中,并将​​其渲染到页面中的其他位置。这种情况只发生了一些时间,特别是在使用F5进行刷新时(大多数情况下使用Ctrl + F5进行后续刷新)。

我完全感到困惑,并且会欣赏有关正在发生的事情的任何想法。为什么ui:repeat(和ice:panelSeries)没有从集合中获取值?为什么c:forEach散射是满足的地方(在构建JSf组件树时似乎是竞争条件..也许渲染应该等待c:forEach而它没有)?为什么只在这种情况下才会发生?

我很抱歉我没有包含任何代码片段或屏幕截图,因为我不知道要包括什么......问题太笼统了。但你可以非常容易理解我的语法是正确的......我已经检查过了......我没有使用状态变量(这在ui中引起了太多麻烦:重复)。

1 个答案:

答案 0 :(得分:1)

  

ui:重复只是不迭代   

以下代码有效:

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

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

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

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