五、数据分页与翻页控件
- hibernate支持分页,其实现原理读者可查阅[5]。下面给出一个利用Criteria对象来分页查询的代码片断:
// 默认只有一个条件查询在基类中定义,新增查询方法在子类中新增
public List findEntities(Object vo, int startRow, int pageSize)
throws BaseException {
Session session = HibernateSessionFactory.getSession();
Criteria crit = buildCriteria(session, vo); // 创建Criteria对象
crit.setFirstResult(startRow); // 开始行指针
crit.setMaxResults(pageSize); // 每页的记录数
List list = crit.list();
session.close();
return list;
}
// 统计满足条件的记录行数
public int countEntities(Object vo, int startRow, int pageSize)
throws BaseException {
Session session = HibernateSessionFactory.getSession();
Criteria crit = buildCriteria(session, vo);
crit.setProjection(Projections.rowCount()); // 统计记录数
Integer cnt = (Integer) crit.uniqueResult();
session.close();
return cnt.intValue(); // 返回满足查询条件的记录行数
}
- 继承DataModel类
public abstract class PagedListDataModel extends DataModel {
// ... 实现代码参考[4]
}
- jsp页面使用翻页控件dataScroller[]
<h:dataTable border="1" id="data" ...></h:dataTable>
<t:dataScroller id="scroll_1" for="data" fastStep="10" paginator="true" paginatorMaxPages="9">
<f:facet name="first"> <t:graphicImage url="images/arrow-first.gif" border="1" /> </f:facet>
<f:facet name="last"> <t:graphicImage url="images/arrow-last.gif" border="1" /> </f:facet>
<f:facet name="previous"> <t:graphicImage url="images/arrow-previous.gif" border="1" /> </f:facet>
<f:facet name="next"> <t:graphicImage url="images/arrow-next.gif" border="1" /> </f:facet>
<f:facet name="fastforward"> <t:graphicImage url="images/arrow-ff.gif" border="1" /> </f:facet>
<f:facet name="fastrewind"> <t:graphicImage url="images/arrow-fr.gif" border="1" /> </f:facet>
</t:dataScroller>
注意dataScroller的for属性必须指定为dataTable的id。另外要保存图标文件到网址的images目录下面。
问题:页面跳转后回到分页页面时,如何恢复到原来所在的页码?(待解决)