ssh,struts2无刷新分页

1.PageBean

package com.aptch.jb.util;


import java.util.List;
@SuppressWarnings("unchecked")
public class PageBean {
 
 public PageBean() {
  init();
 }

    private List list;// 要返回的某一页的记录列表
    private int allRow; // 总记录数
    private int totalPage;// 总页数
    private int currentPage;// 当前页
    private int pageSize=10;// 每页记录数
    @SuppressWarnings("unused")
 private boolean isFirstPage;// 是否为第一页
    @SuppressWarnings("unused")
 private boolean isLastPage;// 是否为最后一页
    @SuppressWarnings("unused")
 private boolean hasPreviousPage;// 是否有前一页
    @SuppressWarnings("unused")
 private boolean hasNextPage;// 是否有下一页
    private int startPage;// 起始页
    private int endPage;// 结束页

   
    public int getEndPage() {
  return endPage;
 }

 public void setEndPage(int endPage) {
  this.endPage = endPage;
 }

 public int getStartPage() {
  return startPage;
 }

 public void setStartPage(int startPage) {
  this.startPage = startPage;
 }

 public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public int getAllRow() {
        return allRow;
    }

    public void setAllRow(int allRow) {
        this.allRow = allRow;
    }
   
    /**
     * 分页机制。我贴出的代码是我仿百度的分页机制。页面显示10个页码,每页显示5条数据。至于这个机制,自己研究一下就很容易懂得。大体意思就是,当前页总位于中间位置,显示页数是10
     * 分页方法
     * 通过这个方法,得到两个数据——startPage和endPage
     * 页面上的页码就是根据这两个数据处理后显示
     * @param nowPage当前页
     * @param totalPage总页数
     */
    public void paginationTool(int nowPage, int totalPage) {
     this.currentPage = nowPage;
     this.totalPage = totalPage;
     /**
      * 计算startPage与endPage的值
      *
      */
     if (this.totalPage < pageSize) {
      /** if中是总页数小于SHOWPAGES的情况 */
      this.startPage = 1;
      this.endPage = totalPage;
     } else {
      /** else中是总页数大于SHOWPAGES的情况 */
      if (this.currentPage <= pageSize / 2 + 1) {
       this.startPage = 1;
       this.endPage = pageSize;
      } else {
       this.startPage = this.currentPage - (pageSize / 2);
       this.endPage = this.currentPage + (pageSize / 2 - 1);
       if (this.endPage >= this.totalPage) {
        this.endPage = this.totalPage;
        this.startPage = this.totalPage - pageSize + 1;
       }
      }
     }
    }

 

    //得到一共多少页
    public int getTotalPage() {
     
     totalPage=this.countTotalPage(pageSize,allRow);
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    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 void init() {
        this.isFirstPage = isFirstPage();
        this.isLastPage = isLastPage();
        this.hasPreviousPage = isHasPreviousPage();
        this.hasNextPage = isHasNextPage();
    }

    /**
     * 以下判断页的信息,只需getter方法(is方法)即可
     */

    public boolean isFirstPage() {
        return currentPage == 1;// 如是当前页是第1页
    }

    public boolean isLastPage() {
        return currentPage == totalPage;// 如果当前页是最后一页
    }

    public boolean isHasPreviousPage() {
        return currentPage != 1;// 只要当前页不是第1页
    }

    public boolean isHasNextPage() {
        return currentPage != totalPage;// 只要当前页不是最后1页
    }

    /** */
    /**
     * 计算总页数,静态方法,供外部直接通过类名调用
     *
     * @param pageSize
     *            每页记录数
     * @param allRow
     *            总记录数
     * @return 总页数
     */
    public  int countTotalPage(final int pageSize, final int allRow) {
        int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
                / pageSize + 1;
        return totalPage;
    }

    /** */
    /**
     * 计算当前页开始记录
     *
     * @param pageSize
     *            每页记录数
     * @param currentPage
     *            当前第几页
     * @return 当前页开始记录号
     */
    public static int countOffset(final int pageSize, final int currentPage) {
        final int offset = pageSize * (currentPage - 1);
        return offset;
    }

    /**
     * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
     *
     * @param page 传入的参数(可能为空,即0,则返回1)
     * @return 当前页
     */
    public static int countCurrentPage(int page) {
        final int curPage = (page == 0 ? 1 : page);
        return curPage;
    }

 

  
 

    public static int countTotalGroup(int totalPage) {
        int totalGroup = totalPage % 5 == 0 ? totalPage / 5 : totalPage / 5 + 1;
        return totalGroup;
    }

 

 public void setHasNextPage(boolean hasNextPage) {
  this.hasNextPage = hasNextPage;
 }

 public void setHasPreviousPage(boolean hasPreviousPage) {
  this.hasPreviousPage = hasPreviousPage;
 }

 public void setFirstPage(boolean isFirstPage) {
  this.isFirstPage = isFirstPage;
 }

 public void setLastPage(boolean isLastPage) {
  this.isLastPage = isLastPage;
 }

  public static void main(String[] args) {
         PageBean p = new PageBean();
      p.paginationTool(7, 144);
      System.out.println(p.getStartPage());
      System.out.println(p.getEndPage());
      
     }

}

2.dao

public PageBean getSearchClaim(final int pageNo,final int pageSize ,final ClaimVoucher claimVoucher, final Employee emp){
 
 return (PageBean)super.getHibernateTemplate().execute(new HibernateCallback(){
  
   public Object doInHibernate(Session session) throws HibernateException, SQLException {
    PageBean pageBean = new PageBean();
    String hql = "from ClaimVoucher c inner join fetch  c.employeeByCreateSn where 1=1"; 
    Query query = session.createQuery(hql);
//    if(claimVoucher!=null && emp!=null){
//     hql +=" and cemployeeByCreateSn.name=? order by  c.status  asc c.createTime desc";
//     query.setString(0, emp.getName());
//    }
       query.setFirstResult((pageNo - 1) * pageSize);
          query.setMaxResults(pageSize);
                List list = query.list();
                pageBean.setList(list);
                //每页几条数据,默认10条
                pageBean.setPageSize(pageSize);
                //得到数据库中的条数
                pageBean.setAllRow(getCount());
                //当前第几页,默认第一页
                pageBean.setCurrentPage(pageNo);
                //得到一共几页
                pageBean.setTotalPage(pageBean.getTotalPage());
                //模仿百度分页,只显示10条数据
                pageBean.paginationTool(pageNo, pageBean.getTotalPage());
    return pageBean;
   }
   
  });
 }

3.action

public String toListClaim() {
  List empList = (List) ActionContext.getContext().getSession().get(
    "employee");
  HttpServletRequest request = ServletActionContext.getRequest();
  String pageNo = request.getParameter("pageNo");
  int currentPage = 1;
  if(pageNo!=null){
   currentPage=Integer.parseInt(pageNo);
  }
  System.out.println(pageNo);
  if (empList.size() != 0) {
   Employee emp = (Employee) empList.get(0);
   claimVoucher.setEmployeeByCreateSn(emp);
   PageBean pagelist = claimVoucherBiz.getSearchClaim(currentPage, 10, claimVoucher, emp);
   request.setAttribute("claim", pagelist);
   request.setAttribute("currentPage", currentPage);
   return SUCCESS;
  } else {
   return ERROR;
  }
 }

4.xml

    <package name="cla" extends="struts-default" >
       <action name="cla" class="com.atpech.jb.web.action.ClaimVoucherAction">
           <result name="success" >/showClaim.jsp</result>
           <result name="successDetail">cla!toListClaim.action</result>
           <result name="error">/error.jsp</result>
        </action>
     </package>

 

5.jsp

 

<sx:div id="info" >
  <table width="603" height="67" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td>n编号<br></td>
      <td>填报日期</td>
      <td>填报人</td>
      <td>总金额</td>
      <td>状态</td>
      <td>操作</td>
    </tr>
     <c:forEach var="item" items="${claim.list}">
   <tr>
      <td> ${item.id}</td>
      <td> ${item.createTime}</td>
      <td> ${item.employeeByCreateSn.name} </td>
      <td>${item.totalAccount}</td>
      <td>${item.status}</td>
      <td>&nbsp;</td>
    </tr>
      </c:forEach>
   </table>
    
 <sx:a href="cla!toListClaim.action?pageNo=1" targets="info">[首页]</sx:a>
 <c:if test="${claim.hasPreviousPage }">
     <s:set name="pre"   value="#attr.currentPage-1"></s:set>
     <sx:a href="cla!toListClaim.action?pageNo=%{#pre}" targets="info">[上一页]</sx:a>
 </c:if>
 
  <c:forEach var="index" begin="${claim.startPage}" end="${claim.endPage}" step="1">  
    <s:set name="i" value="#attr.index"></s:set>
    <sx:a href="cla!toListClaim.action?pageNo=%{#i}" targets="info">${index}</sx:a>
 </c:forEach> 

  <c:if test="${claim.hasNextPage}">
     <s:set name="next"   value="#attr.currentPage+1"></s:set>
     <sx:a href="cla!toListClaim.action?pageNo=%{#next}" targets="info">[下一页]</sx:a>
  </c:if>
 
  <s:set name="end" value="#attr.claim.totalPage"></s:set>
  <sx:a href="cla!toListClaim.action?pageNo=%{#end}" targets="info">[末页]</sx:a>
</sx:div>
 
</body>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值