java分页算法

//第一种分页算法:
package cn.eshore.user.util;

public class PageBean {

private int currentPage = 1;// 当前页数

public int totalPages = 0;// 总页数

private int pageSize = 0;// 每页显示数

private int totalRows = 0;// 总数据数

private int startNum = 0;// 开始记录

private int nextPage = 0;// 下一页

private int previousPage = 0;// 上一页

private boolean hasNextPage = false;// 是否有下一页

private boolean hasPreviousPage = false;// 是否有前一页

public PageBean(int pageSize, int currentPage, int totalRows) {

this.pageSize = pageSize;
this.currentPage = currentPage;
this.totalRows = totalRows;

if ((totalRows % pageSize) == 0) {
totalPages = totalRows / pageSize;
} else {
totalPages = totalRows / pageSize + 1;
}

if (currentPage >= totalPages) {
hasNextPage = false;
currentPage = totalPages;
} else {
hasNextPage = true;
}

if (currentPage <= 1) {
hasPreviousPage = false;
currentPage = 1;
} else {
hasPreviousPage = true;
}

startNum = (currentPage - 1) * pageSize;

nextPage = currentPage + 1;

if (nextPage >= totalPages) {
nextPage = totalPages;
}

previousPage = currentPage - 1;

if (previousPage <= 1) {
previousPage = 1;
}

}

public boolean isHasNextPage() {

return hasNextPage;

}

public boolean isHasPreviousPage() {

return hasPreviousPage;

}

/**
* @return the nextPage
*/
public int getNextPage() {
return nextPage;
}

/**
* @param nextPage
*            the nextPage to set
*/
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}

/**
* @return the previousPage
*/
public int getPreviousPage() {
return previousPage;
}

/**
* @param previousPage
*            the previousPage to set
*/
public void setPreviousPage(int previousPage) {
this.previousPage = previousPage;
}

/**
* @return the currentPage
*/
public int getCurrentPage() {
return currentPage;
}

/**
* @param currentPage
*            the currentPage to set
*/
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}

/**
* @return the pageSize
*/
public int getPageSize() {
return pageSize;
}

/**
* @param pageSize
*            the pageSize to set
*/
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

/**
* @return the totalPages
*/
public int getTotalPages() {
return totalPages;
}

/**
* @param totalPages
*            the totalPages to set
*/
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}

/**
* @return the totalRows
*/
public int getTotalRows() {
return totalRows;
}

/**
* @param totalRows
*            the totalRows to set
*/
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}

/**
* @param hasNextPage
*            the hasNextPage to set
*/
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}

/**
* @param hasPreviousPage
*            the hasPreviousPage to set
*/
public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}

/**
* @return the startNum
*/
public int getStartNum() {
return startNum;
}

/**
* @param startNum
*            the startNum to set
*/
public void setStartNum(int startNum) {
this.startNum = startNum;
}
}

     如果你使用的是struts,那么你在调用这个PageBean分页算法之前,你得先取得对你所想要进行分页的数据的总记录数,然后你就实例化这个PageBean,之后你就可以通过get方法得到任何你想要的值。

package test;

import cn.eshore.user.util.PageBean;

public class Test extends DispatchAction{
   
        ......

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

.......
                  int pageSize = 5;
                 
                  String pageId = request.getParameter("pageId");
if (pageId == null || pageId.equals("")) {
pageId = "1";
}
int currentPage = Integer.parseInt(pageId);

                  //从服务层里得到用户的总记录数
int totalRows = userService.getTotalRows();

PageBean page = new PageBean(pageSize, currentPage, totalRows);

....
}

}



//第二种(最简单的算法):

定义两个Vector,一个为储存查询所有记录的totalV,另一个储存当前页的记录currentPageV;

  总的记录数:int totalSize = totalV.getSize();

  每页显示的记录数:int countPerPage;

  总页数:int totalPageNum = totalSize/countPerPage;

  //如果总的记录数和每页记录数的余数大于零,

  //那么总的页数为他们的整除结果加一

  if (totalSize%countPerPage > 0 ){

  totalPageNum = totalSize/countPerPage + 1;

  }

  当前的页数:pageNum;

  for (int j = 0;j<totalV.size();j++){

  //分页,根据当前的页数和每页显示的记录数从totalV中取出记录

  //往currentPageV中添加记录;

  //如果当前记录在(当前页码-1)*每页显示记录数(包括等于)

  //和 当前页码*每页显示记录数(不包括等于)之间的时候;

  //就属于该页的数据

  if ( (j >= (pageNum - 1) * countPerPage) && (j < pageNum * countPerPage)) {

  currentPageV.addElement(totalV.get(j));

  }

  //当currentPageV记录数等于每页显示记录数,

  //停止往currentPageV中添加记录

  if (currentPageV.size() == countPerPage) {

  break;

  }

  }

  那么,当前页中显示的记录,就是currentPageV中的记录。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值