使用 ui:repeat 输出 ResultSet

Posted

技术标签:

【中文标题】使用 ui:repeat 输出 ResultSet【英文标题】:Using ui:repeat to output a ResultSet 【发布时间】:2011-10-22 19:38:52 【问题描述】:

JSF 2.0 中 ui:repeat 标记的文档说您可以迭代 ResultSet 但我的代码:

<ui:repeat value="#bean.resultSet" var="row" varStatus="status">
   #row.string("mysqlColumn")
</ui:repeat>

产生这个错误:

javax.faces.FacesException: Iteration start index is greater than the number of available rows.
    at com.sun.faces.facelets.component.UIRepeat.validateIterationControlValues(UIRepeat.java:682)
    at com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:505)
    at com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:974)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)

【问题讨论】:

这似乎至少发生在空的ResultSet。我希望它在这种情况下根本不会迭代,但它会引发异常。 【参考方案1】:

尽管它似乎被支持作为迭代的参数,但最好先将其转换为List,然后再进行迭代。

这样您就不会将数据库访问技术传播到视图层。

【讨论】:

为什么文档说 value 属性可以包含 ResultSet? download.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/… 嗯,很有趣。似乎可以,但最好不要将其传播到视图层。

以上是关于使用 ui:repeat 输出 ResultSet的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 JSF ui:repeat 循环执行带状态的逻辑

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

在包含的 facelet 中使用 ui:repeat 时,ui:include 的动态呈现将不起作用

使用 ui:repeat 和 b:carousel?

如何使用 <f:ajax render> 重新渲染 <ui:repeat>