Hibernate實現分頁

1.Pager.java

package com.fzw.util;

public class Pager {
  private int totalRows;
  private int totalPages;
  private int pageSize=5;
  private int currentPage;
  private int startRow;//定義爲前一頁的最後一行爲開始行
  
  public Pager(int totalRows){//初始化
    this.totalRows = totalRows;
    this.totalPages = totalRows/pageSize;
    int mod = totalRows%pageSize;
    if(mod>0){//如果不能整除,totalPages加1
      this.totalPages++;
    }
    this.currentPage = 1;
    startRow = 0;//起始行爲第0行
  }

  public int getCurrentPage() {
    return currentPage;
  }

  public void setCurrentPage(int currentPage) {
    this.currentPage = currentPage;
  }

  public int getPageSize() {
    return pageSize;
  }

  public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
  }

  public int getStartRow() {
    return startRow;
  }

  public void setStartRow(int startRow) {
    this.startRow = startRow;
  }

  public int getTotalPages() {
    return totalPages;
  }

  public void setTotalPages(int totalPages) {
    this.totalPages = totalPages;
  }

  public int getTotalRows() {
    return totalRows;
  }

  public void setTotalRows(int totalRows) {
    this.totalRows = totalRows;
  }
  
  public void first(){//獲得第一頁
    currentPage = 1;
    startRow = 0;
  }
  
  public void previous(){//獲得前一頁
    if(currentPage == 1){//如果當前頁是第一頁,那麼什麼也不做
      return;
    }
    currentPage--;
    startRow = (currentPage-1)*pageSize;
  }
  
  public void next(){//獲得下一頁
    if(currentPage <totalPages){
      currentPage++;
    }
    startRow = (currentPage-1)*pageSize;
  }
  
  public void last(){//獲得最後一頁
    currentPage = totalPages;
    startRow = (currentPage-1)*pageSize;
  }
  
  public void refresh(int currentPage){//獲得指定頁面
    this.currentPage = currentPage;
    if(currentPage > totalPages){
      last();
    }
  }
}


2.PagerHelper.java

package com.fzw.util;

import javax.servlet.http.HttpServletRequest;

public class PagerHelper {

  public static Pager getPager(HttpServletRequest request, int totalRows) {
    Pager pager = new Pager(totalRows);
    String currentPage = request.getParameter("currentPage");
    if (currentPage != null) {
      pager.refresh(Integer.parseInt(currentPage));
    }
    String pagerMethod = request.getParameter("pagerMethod");
    if (pagerMethod != null) {
      if (pagerMethod.equals("first")) {
        pager.first();
      } else if (pagerMethod.equals("previous")) {
        pager.previous();
      } else if (pagerMethod.equals("next")) {
        pager.next();
      } else if (pagerMethod.equals("last")) {
        pager.last();
      }
    }
    return pager;
  }

}


3. UserDAO:

public Collection findWithPage(final Pager pager){
          
          return this.getHibernateTemplate().executeFind(new HibernateCallback(){
            public Object doInHibernate(Session session)throws HibernateException,SQLException{
              Query query = session.createQuery("from User");
              query.setFirstResult(pager.getStartRow());
              query.setMaxResults(pager.getPageSize());
              return query.list();
            }
          });
        }

4.UserAction:

public ActionForward show(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response) {

    Collection clUsers = null;
    List list = userService.findAll();
    int totalRows = list.size();
    Pager pager = PagerHelper.getPager(request,totalRows);
    clUsers = userService.findWithPage(pager);
    request.setAttribute("clUsers", clUsers);
    request.setAttribute("pager", pager);

    return mapping.findForward("success");

  }


5.UserInfo.jsp:

----------
  <bean:define id="pager" name="pager"></bean:define>

<html:link page="/user.do?methodCode=show&pagerMethod=first">首頁</html:link>
    <html:link page="/user.do?methodCode=show&pagerMethod=previous"
      paramId="currentPage" paramName="pager" paramProperty="currentPage">上一頁</html:link>
    <html:link page="/user.do?methodCode=show&pagerMethod=next"
      paramId="currentPage" paramName="pager" paramProperty="currentPage">下一頁</html:link>
    <html:link page="/user.do?methodCode=show&pagerMethod=last"
      paramId="currentPage" paramName="pager" paramProperty="currentPage">尾頁</html:link>
    第<bean:write name="pager" property="currentPage" />頁
    共<bean:write name="pager" property="totalPages" />頁

注:其中的paramId,paramName,paramProperty沒起作用!!!







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章