Webwork+hibernate+spring分頁實現

Webwork+hibernate+spring分頁實現

Webwork+Spring+Hibernate中的分頁方法

      在實際的開發中,學習了其他人的分頁方案,經過修改形成了一個可以直接使用的分頁方案,現說明如下。 該分頁可以實現定製每頁顯示的記錄數、上下翻頁和跳到一個指定的頁面的功能。

一、定義了一個Page類和PageHelper類。

Page.java

public class Page {

 //-----------------數據庫相關參數-----------------

 //默認每頁顯示記錄數?

 private int perPage = 10;

 //頁碼

 private int page = 1;

 //記錄總數

 private int total = 0;

 //開始記錄數(新的遊標起始位置)

 private int startRs=0;

 //翻頁的url(路徑),不帶參數,參數由其它屬性指定

 private String url = "";

 //------------------頁面相關參數------------------

 //首頁

 private String firstPage = "";

 //上一頁

 private String prePage = "";

 //下一頁

 private String nextPage = "";

 //最後一頁

 private String lastPage = "";

 //每頁顯示記錄數

 private String numPage = "";

 //跳轉到第幾頁

 private String jumpPage = "";

 //總頁數

 private int totalPage = 1;

 //

 private String hql = "";

 

 public Page() {

 }

//省略getXXX()和setXXX()

PageHelper.java

public class PageHelper {

    private boolean isHaveParam = false;//是否有參數?

    

 public PageHelper() {

     //

 }

 /**

  * 用於計算用戶自定義每頁顯示記錄數

  *

  * @return

  */

 public int doCustomPerPage(int customPerPage) {

  int perPage = customPerPage;

  String cPerPage = String.valueOf(perPage);

  if (!"".equals(cPerPage)) {

      ActionContext.getContext().getSession().put(Constant.COUNT_PERPAGE,cPerPage);

  }

  String cUserPerPage =

      (String) ActionContext.getContext().getSession().get(Constant.COUNT_PERPAGE);

  if (null != cUserPerPage) {

   perPage = Integer.parseInt(cUserPerPage);

  }

  return perPage;

 }

 public Page getNextPageObject(Page pageObject) {

  int page = 1;

  int total = 0;

  int perPage = 20;

  // 取分頁器參數

  

  //頁碼

  page = pageObject.getPage();

  //總記錄數

  total = pageObject.getTotal();

  //每頁顯示的記錄數

  perPage = pageObject.getPerPage();

  //需要分頁的action名稱

  String url = pageObject.getUrl();

  

  boolean display1 = false;//有首頁?

  boolean display2 = false;//有上一頁?

  boolean display3 = false;//有下一頁?

  boolean display4 = false;//有最後一頁?

  //總頁數

  int totalPage = (total + perPage - 1) / perPage;

  if (page > totalPage || page < 0) {

   page = 1;

  }

  // 首頁

  StringBuffer firstPageBuffer = new StringBuffer();

  if (totalPage > 1) {

      if(isHaveParam){

          firstPageBuffer.append(url + "&pageNo=1");

      }else{

          firstPageBuffer.append(url + "?pageNo=1");

      }

   display1 = true;

  }

    

  // 上一頁?

  StringBuffer prePageBuffer = new StringBuffer();

  if (page > 1) {

      if(isHaveParam){

          prePageBuffer.append(url + "&pageNo=" + (page - 1));

      }else{

          prePageBuffer.append(url + "?pageNo=" + (page - 1));

      }

   display2 = true;

  }

  

  // 下一頁?

  StringBuffer nextPageBuffer = new StringBuffer();

  if (page < totalPage) {

      if(isHaveParam){

          nextPageBuffer.append(url + "&pageNo=" + (page + 1));

      }else{

          nextPageBuffer.append(url + "?pageNo=" + (page + 1));

      }

   display3 = true;

  }

  

  // 最後一頁?

  StringBuffer lastPageBuffer = new StringBuffer();

  if (totalPage > 1) {

   if(isHaveParam){

       lastPageBuffer.append(url + "&pageNo=" + totalPage);

      }else{

          lastPageBuffer.append(url + "?pageNo=" + totalPage);

      }   

   display4 = true;

  }

  

  // 每頁顯示記錄數?

  StringBuffer numPageBuffer = new StringBuffer();

  numPageBuffer.append("<select name=/"perPage/" ");

  numPageBuffer.append(" οnchange=/"");

  numPageBuffer.append(" if(this.options[this.selectedIndex]");

  numPageBuffer.append(".value!=''){");

  if(isHaveParam){

      numPageBuffer.append(" location='" + url + "&");

     }else{

         numPageBuffer.append(" location='" + url + "?");

     }

  numPageBuffer.append("pageNo=1");

  numPageBuffer.append("&perPageCount='+this.options[this.selectedIndex]");

  numPageBuffer.append(".value;}/">");

  for (int i = 1; i <= 4; i++) {

   numPageBuffer.append("<option value=/"" + (i * 10) + "/"");

   if ((i * 10) == perPage) {

    numPageBuffer.append(" selected>" + (i * 10) + "</option>");

   } else {

    numPageBuffer.append(">" + (i * 10) + "</option>");

   }

  }

  numPageBuffer.append("</select>");

  pageObject.setNumPage(numPageBuffer.toString());

  // 跳轉到第幾頁

  StringBuffer jumpPageBuffer = new StringBuffer();

  jumpPageBuffer.append("<select name=/"pages/"");

  jumpPageBuffer.append(" οnchange=/"");

  jumpPageBuffer.append(" if(this.options[this.selectedIndex]");

  if(isHaveParam){

      jumpPageBuffer.append(".value!=''){location='" + url + "&");

     }else{

         jumpPageBuffer.append(".value!=''){location='" + url + "?");

     }

  jumpPageBuffer.append("pageNo='+this.options[this.selectedIndex]");

  jumpPageBuffer.append(".value;}/">");

  for (int i = 1; i <= totalPage; i++) {

   jumpPageBuffer.append("<option value=/"" + i + "/"");

   if (i == page) {

    jumpPageBuffer.append("selected");

   }

   jumpPageBuffer.append(">" + i + "</option>");

  }

  jumpPageBuffer.append("</select>");

  pageObject.setJumpPage(jumpPageBuffer.toString());

  

  pageObject.setTotal(total);

  pageObject.setPage(page);

  pageObject.setTotalPage(totalPage);

  if (display1) {     

      pageObject.setFirstPage("<A HREF=/""+firstPageBuffer.toString()+"/">首 頁</A>");

  }else{

      pageObject.setFirstPage("首 頁");

  }

  if (display2) {

      pageObject.setPrePage("<A HREF=/""+prePageBuffer.toString()+"/">上一頁</A>");

  }else{

      pageObject.setPrePage("上一頁");

  }

  if (display3) {

      pageObject.setNextPage("<A HREF=/""+nextPageBuffer.toString()+"/">下一頁</A>");

  }else{

      pageObject.setNextPage("下一頁");

  }

  if (display4) {

      pageObject.setLastPage("<A HREF=/""+lastPageBuffer.toString()+"/">尾 頁</A>");

  }else{

      pageObject.setLastPage("尾 頁");

  }

  

  pageObject.setNumPage(numPageBuffer.toString());

  pageObject.setJumpPage(jumpPageBuffer.toString());

  

  return pageObject;

 }

    /**

     * @return Returns the isHaveParam.

     */

    public boolean isHaveParam() {

        return isHaveParam;

    }

    /**

     * @param isHaveParam The isHaveParam to set.

     */

    public void setHaveParam(boolean isHaveParam) {

        this.isHaveParam = isHaveParam;

    }

}

      Page類主要是存儲分頁時每頁的相關信息,PageHelper類主要是根據用戶通過URL送來的參數設置Page對象的相關屬性,然後再用這些屬性設置頁面中的分頁

二、頁面中的代碼

<!--

<table width="20%" align="center"><tr><td height="5"></td></tr></table>

<table width="75%" align=center cellpadding="0" cellspacing="0" bgcolor="#F4F4F4" style="border: 1 solid #CCCCCC">

<thead>

<tr>

<td height="30">&nbsp;&nbsp; <font color=blue><ww:property value="page.total"/></font> 條記錄&nbsp;

<ww:property value="page.firstPage"/>&nbsp;

<ww:property value="page.prePage"/>&nbsp;

<ww:property value="page.nextPage"/>&nbsp;

<ww:property value="page.lastPage"/>&nbsp;&nbsp;&nbsp;

頁次:<ww:property value="page.page"/>/<ww:property value="page.totalPage"/>&nbsp;&nbsp;

每頁顯示 <ww:property value="page.numPage"/> &nbsp;&nbsp;

跳轉到第&nbsp;<ww:property value="page.jumpPage"/>&nbsp;</td>

</tr>

</thead>

</table>

-->

主要是把page對象的屬性通過Webwork中定義的標籤顯示在頁面中。

三、Action中的調用代碼

public String execute() throws Exception{

       

        if (logger.isDebugEnabled()) {

            logger.debug("teamId="+teamId+"--載入日誌成功!");

        }

       

              user = (User)ActionContext.getContext().getSession().get(Constant.LOGIN_USER_KEY);

             

        //如果是用戶,設定組織編號。如果是領導,則通過參數給組織編號賦值。

        if( (null == teamId) || ("".equals(teamId))){

            this.setTeamId(user.getOrgan().getId());

      

 

}       

       

        int perPage = 10;

        String totalHql =

            "select count(*) from Log as log where log.user.organ.id='"+teamId+"'";

              PageHelper pageHelper = new PageHelper();

              if(perPageCount != -1){

                  perPage = pageHelper.doCustomPerPage(perPageCount);

              }

          

              Page pageObj = new Page();

              pageObj.setPerPage(perPage);

              pageObj.setPage(pageNo);

              pageObj.setHql(" from Log log order by log.id desc where log.user.organ.id='"+teamId+"'");

              pageObj.setTotal(this.logDao.getTotal(totalHql));

        if(user.isLeader()){   

               this.setTeams(logDao.listTeams());

               pageHelper.setHaveParam(true);

               pageObj.setUrl("listlogs"+Constant.FILE_SUFFIX+"?teamId="+teamId);

        }else{

            pageObj.setUrl("listlogs"+Constant.FILE_SUFFIX);

        }

              pageObj.setStartRs((pageNo-1) * perPage);

 

              page = pageHelper.getNextPageObject(pageObj);

             

        //列出組織

        this.setLogs(this.logDao.getList(page));

 

        //根據組織ID獲得名稱

        this.setTeamName(logDao.getNameById(teamId));

 

        if (logger.isDebugEnabled()) {

            logger.debug("載入session用戶成功!");

        }       

        return SUCCESS;

    }

 

 

源文檔 <http://cache.baidu.com/c?word=webwork%2C%B7%D6%D2%B3&url=http%3A//blog%2Ecsdn%2Enet/cnliuxj/archive/2006/01/06/571755%2Easpx&b=9&a=18&user=baidu>

 

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