//********* 主要用于jsp网站页面呈现的分页管理中,此类具有功能强大,使用方便的特点!
package lauo;
import java.util.*;
/*
*一个分页管理器,
*用于处理在网页分页系统中出现的问题
*/
public class
PageManage
{
private Object[] data=null;
//要管理的分页数据,这些数据存放于数组当中(条目数组)
private int perLen=1;//每页的内容长度(条目数)
private
int ptr = 0; //当前指针(页码下标)
private int max = 0;//最大的页数
public
PageManage(){};
/*
*设置页长
*/
public int setPerLen(int
i)
{
int r = perLen;
perLen = i;
if(perLen<=0)
perLen=1;
return r;
}
/*
*获得单位页所能保存的内容数(条目数)
*/
public int getPerLen()
{
perLen = perLen<=0?
1:perLen;
return perLen;
}
/*
*获得最大的页数
*/
public int
getMaxPage()
{
if(data==null) return max=1;
perLen =
perLen<=0?1:perLen;
return
max=(data.length+perLen)/perLen;
}
/*
*下一页,得到的是++ptr
*/
public int nextPage()
{
++ptr;
ptr = ptr >= max ?
max-1:ptr;
return ptr;
}
/*
*上一页
*/
public int
prePage()
{
--ptr;
ptr = ptr <0 ? 0:ptr;
return
ptr;
}
/*
*得到当前页码
*/
public int getPageNo()
{
int
m = getMaxPage();
ptr = ptr<0?0:(ptr>m?m:ptr);
return
ptr;
}
/*
*设置当前页码
*/
public int setPageNo(int
i)
{
int r = ptr;
ptr = i;
ptr = ptr>=getMaxPage()?max-1:(
ptr<0? 0 : ptr );
return r;
}
/*
*设置需要分页的数据
*/
public Object[] setData(Object[] d)
{
Object[] r =
data;
data = d;
getMaxPage();//最大的页数
return r;
}
/*
*获得当前页,得到的是数据内容(当前页的条目数组)
*/
public Object[]
getNowPage()
{
getPerLen();
Object[] page = new
Object[perLen];
for(int i=0;i<perLen &&data!=null
&&i+ptr*perLen<data.length;i++)
page[i]=data[ptr*perLen+i];
return
page;
}
/*
*得到数据所在页范围的条目数据下界
*/
public int
getNowPageLow()
{
getPerLen();
getPageNo();
return
ptr*perLen;//下界
}
/*
*获得所在页范围的条目数据上界
*/
public int
getNowPageHigh()
{
try{
getPerLen();
getPageNo();
int
h=ptr*perLen+perLen-1;//上界
h =
h>=data.length?data.length-1:h;
return h;
}
catch(Exception
e){ return 0;}
}
/*
*获得某一区间内的页码
*包括首未页,返回的是页码
*int
range;为页码呈现的区间。如 【3】 【4】 【5】 这个区间长度为3
*/
public int[] getRange(int
range)
{
getPageNo();
int[] ans = null;
int m
=getMaxPage();//得到最大的页码
range =
range<=0?1:(range>m?m:range);
ans = new
int[range];//得到区间页码存储数组
int left = ptr - range/2 ; //得到最左侧的页码
left =
left <0?0:(left+range>=m ? m-range:left); //游动、修正
for(int
i=0;i<range;i++,left++)
ans[i]=left;//得到页标范围的结果
return
ans;
}
}
使用举例(jsp 源码摘要):
<jsp:useBean id="pager" class="lauo.PageManage" scope="session"></jsp:useBean><!---使用分页管理器 javaBeans --->
String pnoStr = request.getParameter("pageNo");
Integer pno =
pnoStr==null?0:Integer.parseInt(pnoStr);
pager.setPageNo(pno.intValue());
pager.setPerLen(30);
Vector<Object[]> v = bbsDbm.getBoardArticles(bname);//获得对应版面的文章列表
Object[] pat=null;
pat = v==null||v.size()==0?null:new
Object[v.size()];
pager.setData(pat);//设置数据
int
i=0,j=pager.getNowPageLow(),len=pager.getPerLen(),
high=pager.getNowPageHigh(),vsize=v.size();
int []range = pager.getRange(10);//获得页码呈现的区间
if(pager.getMaxPage()>1)//要呈现的页面超过1页,需要分页呈现
{
wstr+=("<tr><th align='center'><font color='blue'>");
wstr+=("<a href='board.jsp?pageNo=0'>[首页]</a> ");
for(i=0;i<range.length;i++)
wstr+=("<a
href='board.jsp?pageNo="+range[i]+"'>["+(range[i]+1)+"]</a> ");
wstr+=("<a
href='board.jsp?pageNo="+(pager.getMaxPage()-1)+"'>[末页]</a> ");
wstr+=("</th></tr>");
}