java 通用分页_Java通用分页

package courses.util;

import java.util.ArrayList;

import java.util.List;

/*

* 通用分页器

*/

public class Pager

{

protected intpageSize = 5; //每页大小

protected intpageNo = 1; //当前页码

protected introwCount = 0; //记录总数

protected intpageCount = 1; //总页数

protected intfirstPageNo= 1;

protected intprePageNo= 1;

protected intnextPageNo= 1;

protected intlastPageNo= 1;

protected int groupId = 1; //当前组号

protected int preGroup = 1; //上一组号

protected int nextGroup = 1; //下一组号

protected int pageNoGroup[] = null; //页号数组

protected int[]pageSizeList = {5, 8, 10, 15, 20}; //页面大小数组

protected ListresultList; //查询的结果集List

/*

* pageCount(总页数)由rowCount(记录总数)和pageSize(页面大小)计算得出

* groupCount(页号组数)由pageCount(总页数)和groupSize(页号数组大小)计算得出

*/

//在构造方法中完成各个参数的计算

public Pager(int pageSize, int pageNo, int groupId, int rowCount, List resultList)

{

this.pageSize = pageSize; //从用户请求中获得

this.pageNo = pageNo; //从用户请求中获得

this.groupId = groupId; //从用户请求中获得

this.rowCount = rowCount; //rowCount从dao中获得

this.resultList = resultList;//resultList从dao中获得

//根据rowCount和pageSize计算总页数

this.pageCount = (rowCount + pageSize -1) / pageSize;

//最后一页

this.lastPageNo = this.pageCount;

//计算上一页

if(this.pageNo > 1)

{

this.prePageNo = this.pageNo - 1;

}

//计算下一页

if(this.pageNo == this.lastPageNo)

{

this.nextPageNo = this.lastPageNo;

}

else

{

this.nextPageNo = this.pageNo + 1;

}

/*

* 根据总页数pageCount和页号数组大小groupSize,提取页号中的一组,

* 构造pageNoGroup数组包装其中一组,供前台显示

*/

int groupCount = 1; //初始化总的pageNoGroup数

int groupSize = 5; //初始化pageNoGroup数组的大小

//根据pageCount计算总的pageGroup数

groupCount = (this.pageCount + groupSize -1) / groupSize;

/*

* 特殊情况,当记录总数为0时,应该返回一个空数组

*/

/*可以在这里判断用户请求的groupId是否超出实际最大值

* if(groupId>groupCount)

* {

* groupId = 1;

* }

*/

//计算上一组号

if(this.groupId > 1 && this.groupId <= groupCount)

{

this.preGroup = this.groupId - 1;

}

//计算下一组号

if(this.groupId == groupCount)//已经是最后一组

{

this.nextGroup = groupCount;

}

else

{

this.nextGroup = this.groupId + 1;

}

//计算最后一组(特殊组,特殊考虑)的pageNo个数

int restPageNoCount = this.pageCount % groupSize;

/*

* 设置目标数组,封装一组pageNo,

* 数组大小根据最后一组pageNo的个数确定

*/

int pageNoGroup[] ; //目标数组

//如果pageCount为groupSize的整数倍,

//则按预定的groupSize大小构造目标数组

if(restPageNoCount == 0)

{

//该组起始的pageNo,注意startPageNo从1开始

int startPageNo = (this.groupId - 1) * groupSize + 1;

pageNoGroup = new int[groupSize];

for(int i=0; i<=(groupSize-1); i++)

{

pageNoGroup[i] = startPageNo;

startPageNo++;

}

}

else//否则判断请求是否是最后一组,最后一组,特殊处理

{

//不是最后一组,并且总组数大于1,则仍然按预定groupSize的大小构造目标数组

if(this.groupId < groupCount)

{

//该组起始的pageNo,注意startPageNo从1开始

int startPageNo = (this.groupId-1) * groupSize +1;

pageNoGroup = new int[groupSize];

for(int i=0; i<=(groupSize-1); i++)

{

pageNoGroup[i] = startPageNo;

startPageNo++;

}

}

//最后一组,则按剩下的restCount大小构造pageNoGroup数组

else

{

//该组起始的pageNo,注意startPageNo从1开始

int startPageNo = (this.groupId-1) * groupSize +1;

pageNoGroup = new int[restPageNoCount];

for(int i=0; i<=(restPageNoCount-1); i++)

{

pageNoGroup[i] = startPageNo;

startPageNo++;

}

}

}

//封装目标数组

this.pageNoGroup = pageNoGroup;

}

//将pageNo(页面号)进行分组

public int[] getPageNoGroup()

{

//如果总的记录数为0,则返回空数组

if(this.rowCount == 0)

{

return null;

}

else

{

return this.pageNoGroup;

}

}

//构造页面大小数组

public Object[] getPageSizeIndexs()

{

List result = new ArrayList(pageSizeList.length);

for(int i = 0;i < pageSizeList.length;i++)

{

result.add(String.valueOf(pageSizeList[i]));

}

Object[] indexs = (result.toArray());

return indexs;

}

//构造页号数组

//pojo方法,无需在类中设置属性,也可以按属性名称进行访问

public Object[] getPageNoIndexs()

{

List result = new ArrayList(pageCount);

for(int i = 0;i < pageCount;i++)

{

result.add(String.valueOf(i + 1));

}

Object[] indexs = (result.toArray());

return indexs;

}

public int getPageCount()

{

return pageCount;

}

public void setPageCount(int pageCount)

{

this.pageCount = pageCount;

}

public int getPageNo()

{

return pageNo;

}

public void setPageNo(int pageNo)

{

this.pageNo = pageNo;

}

public int getPageSize()

{

return pageSize;

}

public void setPageSize(int pageSize)

{

this.pageSize = pageSize;

}

public int[] getPageSizeList()

{

return pageSizeList;

}

public void setPageSizeList(int[] pageSizeList)

{

this.pageSizeList = pageSizeList;

}

public List getResultList()

{

return resultList;

}

public void setResultList(List resultList)

{

this.resultList = resultList;

}

public int getRowCount()

{

return rowCount;

}

public void setRowCount(int rowCount)

{

this.rowCount = rowCount;

}

public int getFirstPageNo()

{

return firstPageNo;

}

public void setFirstPageNo(int firstPageNo)

{

this.firstPageNo = firstPageNo;

}

public int getLastPageNo()

{

return lastPageNo;

}

public void setLastPageNo(int lastPageNo)

{

this.lastPageNo = lastPageNo;

}

public int getNextPageNo()

{

return nextPageNo;

}

public void setNextPageNo(int nextPageNo)

{

this.nextPageNo = nextPageNo;

}

public int getPrePageNo()

{

return prePageNo;

}

public int getGroupId()

{

return groupId;

}

public void setGroupId(int groupId)

{

this.groupId = groupId;

}

public int getPreGroup()

{

return preGroup;

}

public void setPreGroup(int preGroup)

{

this.preGroup = preGroup;

}

public int getNextGroup()

{

return nextGroup;

}

public void setNextGroup(int nextGroup)

{

this.nextGroup = nextGroup;

}

public void setPrePageNo(int prePageNo)

{

this.prePageNo = prePageNo;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值