如何正确使用带有 h:dataTable 的 ResultSet

Posted

技术标签:

【中文标题】如何正确使用带有 h:dataTable 的 ResultSet【英文标题】:How to correctly use ResultSet with h:dataTable 【发布时间】:2009-11-12 12:43:28 【问题描述】:

问题是,在显示ResultSet<h:dataTable> 之后,连接保持打开状态。如果我关闭它,它也会关闭ResultSet。我正在考虑将ResultSet 数据复制到一些HashMap/ArrayList 组合中。有什么好办法解决这个问题吗?

【问题讨论】:

【参考方案1】:

确实,您应该始终在最短可能的范围内获取关闭ConnectionStatementResultSet(最好已经在相同的方法内)块),你不应该将它们中的任何一个传递到 DAO 类之外。您需要将ResultSet 映射到List<Data>,其中Data 代表表格的每一行。下面是一个如何映射结果集的基本示例:

List<Data> items = new ArrayList<Data>();
...
while (resultSet.next()) 
    Data item = new Data();
    item.setColumn1(resultSet.getString("column1"));
    item.setColumn2(resultSet.getString("column2"));
    items.add(item);

...
return items;

然后你可以在h:dataTablevalue属性中使用它。

有关更多示例和见解,您可能会发现以下一篇或两篇有用的文章:http://balusc.blogspot.com/2006/06/using-datatables.htmlhttp://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html

祝你好运。

【讨论】:

【参考方案2】:

请查看以下链接:http://www.coderanch.com/t/478265/JSF/java/Displaying-array-data-tables#2585794

我相信可以帮助您解决问题

【讨论】:

【参考方案3】:

你在使用ResultDataSetModel吗?如果是,请注意在 javadoc 中保持 Note that the specified ResultSet MUST be scrollable

Statement stmt=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

这是ResultDataSetModel用例的完整示例。

【讨论】:

以上是关于如何正确使用带有 h:dataTable 的 ResultSet的主要内容,如果未能解决你的问题,请参考以下文章

如何在 h:dataTable 中实现行编号

如何在 <h:dataTable> 或 <ui:repeat> 中使用 <h:selectBooleanCheckbox> 来选择多个项目?

c:when 和 c:if 带有来自 h:dataTable var [重复] 的动态参数

如何在 h:dataTable 中使用 h:selectOneRadio 来选择单行?

如何在没有 JSF 标记库(h:datatable 或 ui:repeat)的情况下编写 <table> 标记,但仍使用 JSF 来控制页面流

如何使用 re.sub 专门删除带有类的标签