使用 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的主要内容,如果未能解决你的问题,请参考以下文章
c:forEach vs ui:repeat(又名 ice:panelSeries)