ssh项目中页面分页展现的处理

来源:互联网 发布:知世故而不世故知乎 编辑:程序博客网 时间:2024/05/21 23:32

这几天一直在研究分页问题。看了别人的例子,自己总算是明白了,以前自己不知道去想怎么实现的,只想着去掉用,现在发现,只要用心,什么都能解决。一下是自己大概的总结,算是学习笔记吧,继续努力。

   1.创建PageModel对象,即用来实现分页的javabean组件,代码如下:


import java.util.List;public class PageModel {private int total;//总记录数private int pageSize;//每页记录数private int currentPage;//当前页数private List<?> datas;//结果集private int totalPage;//总的页数               public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getTotal(){return total;}public void setTotal(int total){this.total = total;}public List<?> getDatas(){return datas;}public void setDatas(List<?> datas){this.datas = datas;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}// 获取第一页public int getFirstPage() {return 1;}// 获取最后下一页public int getLastPage() {return (total + pageSize - 1) / pageSize;}// 获取下一页public int getNextPage() {return (currentPage >= getLastPage() ? getLastPage() : currentPage + 1);}// 获取上一页public int getPreviousPage() {return currentPage <= 1 ? currentPage : (currentPage - 1);}public String toString() {return "PageModel:[currentPage:" + getCurrentPage() + ",pageSize"+ getPageSize() + ",listSize" + getDatas().size() + "]";}//获取开始的页数,在用到foreach的时候用到1,2,3,4,5public int getStart(){    if(getCurrentPage()<this.getTotalPage()) return 1;return this.getCurrentPage()>this.getPageSize()?(this.getCurrentPage()-this.getPageSize()+1):1 ;}public int getEnd(){//开始位置+设置的pageSize-1return  (this.getStart()+this.getPageSize()-1)>this.getTotalPage()? this.getTotalPage():(this.getStart()+this.getPageSize()-1);}}
 

    2.对应的分页方法封装在PagerDao里面,代码如下:

import java.util.List;import org.hibernate.Query;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class PagerDao extends HibernateDaoSupport {     public PageModel getDatas(String hql,int offset,int pageSize){ String countHql = getCountQuery(hql);//为下面方法的调用,获取sql语句            Query query_number = this.getSession().createQuery(countHql); int total = ((Long)query_number.uniqueResult()).intValue();//总记录          Query query_datas = this.getSession().createQuery(hql);   List<?> datas=null; if(offset==-1&&pageSize==-1){ datas = query_datas.list(); }else{ datas = query_datas.setFirstResult(offset).setMaxResults(pageSize).list();//生成list集合 }  int totalPage = total % pageSize == 0 ? total/ pageSize : total / pageSize + 1; PageModel pm = new PageModel(); pm.setDatas(datas); pm.setTotal(total); //添加总的页面数 pm.setTotalPage(totalPage);  return pm;  }  /**   * 根据HQL语句生成对应的查询语句   * @param hql   * @return   */  private String getCountQuery(String hql){  System.out.println(hql);  int index = hql.indexOf("from");    if(index!=1){  String s = "select count(*)"+hql.substring(index);      return s;  }  throw new RuntimeException("无效的HQL查询语句!");  }}
3.接下来时展现分页方法的实现,如下:


4.对应的action

public String show() throws Exception{HttpServletRequest request = ServletActionContext.getRequest();if (currentPage == 0) {currentPage = 1;} else {currentPage = Integer.parseInt(request.getParameter("currentPage"));}int offset =(currentPage-1)*pageSize;PageModel pageModel=this.bbsManager.showBBS(offset, pageSize);pageModel.setPageSize(4);//这两个人的作用是:前台取出数据时的分页pageModel.setCurrentPage(currentPage);    request.setAttribute("bbsPm",pageModel);return "show_success";}

5.前台展现页面实现


展现效果如下图: