分页类实例 java
保存代码片段
分页类:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package cn.news.vo; 2 3 import java.util.List; 4 /** 5 * 用于在页面上使用的数据类,包含有分页的信息及相应的数据 6 * @author Administrator 7 * @param <T> 检索的数据实体类型 8 */ 9 public class PageData<T> { 10 private List<T> list ; 11 private boolean isFirst=false; //是否是首页 12 private boolean isEnd=false; //是否是尾页 13 private int page=1; //跳转页,默认为第一页 14 private int count=10; //每页的记录数,默认每页显示10条记录 15 private int totalPage; //总共的页码 16 private int totalRows; //总共的记录数 17 private int realRowIndex; //该分页在数据库中真实的记录行数 18 19 /** 20 * 在DaoImpl中取得查询实体的总记录后设置该属性 21 * 跳转的页面、每页的记录、总记录,三个已知可以确定本类中的分页属性 22 * @param totalRows 23 */ 24 public void setTotalRows(int totalRows) { 25 if (totalRows==0) { 26 totalPage = 1 ; 27 }else{ 28 this.totalPage = totalRows/count+1 ; //可以得到全部的页面 29 } 30 this.init(); //设置分页的基本数据 31 this.totalRows = totalRows; 32 } 33 34 public void init(){ //初始化分页的基本数据 35 if(page < 1){ 36 page = 1 ; 37 } 38 if(page<totalPage){ 39 if(page==1){ 40 isFirst = true ; 41 isEnd = false ; 42 } 43 }else if(page==totalPage){ 44 if (page==1) { 45 isFirst = true ; 46 isEnd = true ; 47 }else{ 48 isFirst = false ; 49 isEnd = true ; 50 } 51 }else if(page>totalPage){ 52 page = totalPage; 53 if (totalPage==1) { 54 isFirst = true ; 55 isEnd = true ; 56 }else { 57 isFirst = false ; 58 isEnd = true ; 59 } 60 } 61 realRowIndex = (page-1)*count ; 62 } 63 @Override 64 public String toString() { 65 return "PageData [isFirst=" + isFirst + ", isEnd=" + isEnd + ", page=" 66 + page + ", count=" + count + ", totalPage=" + totalPage 67 + ", totalRows=" + totalRows + ", realRowIndex=" + realRowIndex 68 + "]"; 69 } 70 public List<T> getList() { 71 return list; 72 } 73 public void setList(List<T> list) { 74 this.list = list; 75 } 76 public int getRealRowIndex() { 77 return realRowIndex; 78 } 79 public int getPage() { 80 return page; 81 } 82 public void setPage(int page) { 83 this.page = page; 84 } 85 public int getCount() { 86 return count; 87 } 88 public void setCount(int count) { 89 this.count = count; 90 } 91 public int getTotalPage() { 92 return totalPage; 93 } 94 public void setTotalPage(int totalPage) { 95 this.totalPage = totalPage; 96 } 97 public boolean getIsFirst() { 98 return isFirst; 99 } 100 public void setIsFirst(boolean isFirst) { 101 this.isFirst = isFirst; 102 } 103 public boolean getIsEnd() { 104 return isEnd; 105 } 106 public void setIsEnd(boolean isEnd) { 107 this.isEnd = isEnd; 108 } 109 public int getTotalRows() { 110 return totalRows; 111 } 112 }
使用 Hibernate 的 DaoImpl 中的方法:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public PageData<V> findOnPage(PageData<V> page) { 2 List<V> list = null ; 3 String hql = "from "+ this.entityClazz.getName()+" order by id desc"; 4 try { 5 page.setTotalRows(getTotalRows()); 6 list = this.getSession().createQuery(hql) 7 .setFirstResult(page.getRealRowIndex()) 8 .setMaxResults(page.getCount()) 9 .list(); 10 page.setList(list); 11 } catch (DataAccessResourceFailureException e) { 12 e.printStackTrace(); 13 } catch (HibernateException e) { 14 e.printStackTrace(); 15 } catch (IllegalStateException e) { 16 e.printStackTrace(); 17 } 18 return page; 19 }
前台导航栏(Struts2 标签):
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 pageData为 action 中的分页类的对象 2 3 <td> 4 <s:if test="pageData.isFirst"> 5 首页 | 6 上一页 | 7 </s:if> 8 <s:else> 9 <a href="newsAction-findByPage?pageData.page=1">首页</a> | 10 <a href="newsAction-findByPage?pageData.page=${pageData.page-1}">上一页</a> | 11 </s:else> 12 <s:if test="pageData.isEnd"> 13 下一页 | 14 尾页 | 15 </s:if> 16 <s:else> 17 <a href="newsAction-findByPage?pageData.page=${pageData.page+1}">下一页</a> | 18 <a href="newsAction-findByPage?pageData.page=${pageData.totalPage}">尾页</a> | 19 </s:else> 20 转到 <input type="text" style="width: 30px"> 页 21 <input type="button" value="跳转" />,共 ${pageData.totalPage} 页 22 </td>