Webwork+hibernate+spring分页实现

来源:互联网 发布:虎豹骑 优化 编辑:程序博客网 时间:2024/04/26 18:22

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(" onchange=/"");

  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(" onchange=/"");

  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>

 

 
原创粉丝点击