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;
}
}