java: 功能强大的分页管理器(PageManage)

本文介绍了一个用于JSP网站的分页管理器类,该类能够方便地处理网页分页显示的需求,包括设置每页显示条目数量、获取最大页数、翻页操作等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


//********* 主要用于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>&nbsp");
    for(i=0;i<range.length;i++)
     wstr+=("<a href='board.jsp?pageNo="+range[i]+"'>["+(range[i]+1)+"]</a>&nbsp");
    wstr+=("<a href='board.jsp?pageNo="+(pager.getMaxPage()-1)+"'>[末页]</a>&nbsp");
    wstr+=("</th></tr>");
   }


 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值