马尔代夫
学会真心付出
posts - 0,comments - 0,trackbacks - 0

ArticlesManager 的分页功能基于 Hibernate 的 分页实现。

主要好处就是移植了,至于效率如何,暂时还没有考虑到,Hibernate推荐的,应该还不错吧!

将含有分页的列表页面作为一个对象,对象中组合了 Articles 这个对象。

该对象还具有返回是否是首页,是否为末页,是否有上页,下页 等方法。

PageNavigation.java  的类的具体代码:

						
JavaZoo.com © 2006. Code Language:java.
  1. package net.hulihutu.pages;
  2.  
  3.  
  4. import org.hibernate.HibernateException;
  5. import org.hibernate.Query;
  6. import org.hibernate.ScrollableResults;
  7.  
  8.  
  9. import java.util.List;
  10.  
  11.  
  12. /**
  13. * Hibernate分页信息
  14. */
  15. public class PageNavigation implements Page {
  16. private List elements;
  17.  
  18.  
  19. private int pageSize;
  20. private int pageNumber;
  21. private int totalElements = 0;
  22.  
  23.  
  24. /**
  25. * 构建PageNavigation对象,完成Hibernate的Query数据的分页处理
  26. *
  27. * @param query Hibernate的Query对象
  28. * @param pageNumber 当前页编码,从1开始,如果传的值为Integer.MAX_VALUE表示获取最后一页。
  29. * 如果你不知道最后一页编码,传Integer.MAX_VALUE即可。如果当前页超过总页数,也表示最后一页。
  30. * 这两种情况将重新更改当前页的页码,为最后一页编码。
  31. * @param pageSize 每一页显示的条目数
  32. */
  33. public PageNavigation(Query query, int pageNumber, int pageSize){
  34. this.pageNumber = pageNumber;
  35. this.pageSize = pageSize;
  36. try {
  37. ScrollableResults scrollableResults = query.scroll();
  38. //get the total elements number
  39. scrollableResults.last();
  40. this.totalElements = scrollableResults.getRowNumber();
  41. if ( Integer .MAX_VALUE == this.pageNumber
  42. || this.pageNumber > getLastPageNumber())//last page
  43. {
  44. this.pageNumber = getLastPageNumber();
  45. }
  46. elements = query.setFirstResult(
  47. ( this.pageNumber - 1) * this.pageSize).setMaxResults(
  48. this.pageSize + 1).list();
  49. } catch (HibernateException e){
  50. throw new RuntimeException (e);
  51. }
  52. }
  53. public boolean getIsFirstPage(){
  54. return getThisPageNumber() == 1;
  55. }
  56.  
  57.  
  58. public boolean getIsLastPage(){
  59. return getThisPageNumber() >= getLastPageNumber();
  60. }
  61.  
  62.  
  63. public boolean getHasNextPage(){
  64. return getLastPageNumber() > getThisPageNumber();
  65. }
  66.  
  67.  
  68. public boolean getHasPreviousPage(){
  69. return getThisPageNumber() > 1;
  70. }
  71.  
  72.  
  73. public int getLastPageNumber(){
  74. return totalElements % this.pageSize == 0 ? totalElements
  75. / this.pageSize : totalElements / this.pageSize + 1;
  76. }
  77.  
  78.  
  79. /**
  80. * 返回List类型数据
  81. *
  82. * @return List数据源
  83. */
  84. public List getElements(){
  85. return elements;
  86. }
  87.  
  88.  
  89. public int getTotalNumberOfElements(){
  90. return totalElements;
  91. }
  92.  
  93.  
  94. public int getThisPageFirstElementNumber(){
  95. return (getThisPageNumber() - 1) * getPageSize() + 1;
  96. }
  97.  
  98.  
  99. public int getThisPageLastElementNumber(){
  100. int fullPage = getThisPageFirstElementNumber() + getPageSize() - 1;
  101. return getTotalNumberOfElements() < fullPage ? getTotalNumberOfElements()
  102. : fullPage;
  103. }
  104.  
  105.  
  106. public int getNextPageNumber(){
  107. return getThisPageNumber() + 1;
  108. }
  109.  
  110.  
  111. public int getPreviousPageNumber(){
  112. return getThisPageNumber() - 1;
  113. }
  114.  
  115.  
  116. public int getPageSize(){
  117. return pageSize;
  118. }
  119.  
  120.  
  121. public int getThisPageNumber(){
  122. return pageNumber;
  123. }
  124. }
  125.  
  126.  
Parsed in 0.862 seconds, using GeSHi 1.0.7.12

分页后的文章列表参见附件,右下角为分页连接。

目前Jsp页面中完全不含有 java 类,但是看到很多程序使用的自定义tld来处理分页,打算以后对这部分内容进行重构。

附件4为 articleListAction 。给浏览器返回的是 pageNagivation 类 ^_^

 

图片附件(缩略图):
大小: 203.11 K
尺寸: 400 x 158
浏览: 4 次
点击打开新窗口浏览全图
图片附件(缩略图):
大小: 155.75 K
尺寸: 400 x 122
浏览: 2 次
点击打开新窗口浏览全图
图片附件(缩略图):
大小: 177.13 K
尺寸: 400 x 133
浏览: 3 次
点击打开新窗口浏览全图
图片附件(缩略图):
大小: 46.68 K
尺寸: 400 x 48
浏览: 2 次
点击打开新窗口浏览全图
posted on 2006-10-03 21:10 马尔代夫 阅读(132) 评论(0)  编辑  收藏 所属分类: 框架学习Hibernate