打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Webwork+hibernate+spring分页实现

 在实际的开发中,学习了其他人的分页方案,经过修改形成了一个可以直接使用的分页方案,现说明如下。 该分页可以实现定制每页显示的记录数、上下翻页和跳到一个指定的页面的功能。

一、定义了一个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">   <font color=blue><ww:property value="page.total"/></font> 条记录 

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

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

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

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

页次:<ww:property value="page.page"/>/<ww:property value="page.totalPage"/>  

每页显示 <ww:property value="page.numPage"/>   

跳转到第 <ww:property value="page.jumpPage"/> </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;

    }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
UUID做主键,优点,缺点!
Hibernate 实现分页查询
hibernate 对 sql server 2005 分页改进
java: utf-8转unicode
StringBuffer类的使用方法
asp.net如果在页面上用js实现分页?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服