如何正确使用带有 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】:确实,您应该始终在最短可能的范围内获取并关闭Connection
、Statement
和ResultSet
(最好已经在相同的方法内)块),你不应该将它们中的任何一个传递到 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:dataTable
的value
属性中使用它。
有关更多示例和见解,您可能会发现以下一篇或两篇有用的文章: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> 或 <ui:repeat> 中使用 <h:selectBooleanCheckbox> 来选择多个项目?
c:when 和 c:if 带有来自 h:dataTable var [重复] 的动态参数
如何在 h:dataTable 中使用 h:selectOneRadio 来选择单行?
如何在没有 JSF 标记库(h:datatable 或 ui:repeat)的情况下编写 <table> 标记,但仍使用 JSF 来控制页面流