分享

分页方法的改进

 凤舞天煌 2006-12-14
  网上很容易找到分页的方法,但是功能相对弱,比如两个翻页单向关联的情况需要改写代码。而且在使用中需要加入大段代码。     我对其做了相关改进。   先看看 [使用方法]: /* 如果要在一个action里面多次使用Pager对象则要重命名链接中的参数名字,默认为pager.offset */
  Pager pagerDate = new Pager(request,mapping,"pagerDate.offset");
 
  Calendar nowCalendar = Calendar.getInstance();
  nowCalendar.add(Calendar.DATE,pagerDate.getOffset());   //生成分页对象
  Pager page = new Pager(request, mapping);
  //可重写每页显示条数
  page.setLength(2);
  //按页面要求得到数据
  List list = scheduleManager.getScheduleDayList(nowCalendar, page.getOffset(),
    page.getLength());
  int size = scheduleManager.getScheduleDaySize(nowCalendar);
  //绑定依赖
  page.bindPager(pagerDate);
  //构造分页内容标签
  String pagerHeader = page.generate(size);
 
  request.setAttribute("pagerHeader", pagerHeader);
  request.setAttribute("ContentList", list);
  request.setAttribute("pagerDateHeader",pagerDate.generate());   [jsp页面显示,只需]: <bean:write name="pagerHeader" filter="false"/> <bean:write name="pagerDateHeader" filter="false"/>   [Pager对象实现代码]: package com.itone.virgo.util; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionMapping;   public class Pager {  private int MAX_PAGE_INDEX = 15;
 private String header = "";
 private int offset = 0;
 private int length = 20;
 HttpServletRequest request = null;
 ActionMapping mapping = null;
 String url = "";
 String paramId = "pager.offset";
 String bindString = "";    /**
  * @param request
  * @param mapping
  */
 public Pager(HttpServletRequest request, ActionMapping mapping) {
  this.request = request;
  this.mapping = mapping;
  this.url = request.getContextPath()
    + mapping.getModuleConfig().getPrefix() + mapping.getPath()
    + ".do";
  String pageOffset = request.getParameter(paramId);
  if (pageOffset == null || pageOffset.equals("")) {
   offset = 0;
  } else {
   offset = Integer.parseInt(pageOffset);
  }
 }    /**
  * 一个页面有多个pager对象时需要重写paramId使url里面的param参数有区别
  *
  * @param request
  * @param mapping
  * @param paramId
  */
 public Pager(HttpServletRequest request, ActionMapping mapping,
   String paramId) {
  this.request = request;
  this.mapping = mapping;
  this.paramId = paramId;
  this.url = request.getContextPath()
    + mapping.getModuleConfig().getPrefix() + mapping.getPath()
    + ".do";
  String pageOffset = request.getParameter(paramId);
  if (pageOffset == null || pageOffset.equals("")) {
   offset = 0;
  } else {
   offset = Integer.parseInt(pageOffset);
  }
 }    /**
  * 普遍情况
  */
 public String generate(int size) {
  this.header = "共有" + size + "项符合查询";
  if (size > length) {
   String pref;
   if (url.indexOf("?") > -1) {
    pref = "&";
   } else {
    pref = "?";
   }
   String header = "<font face=‘Helvetica‘ length=‘-1‘>" + this.header
     + " ";
   if (offset > 0) {
    header += " <a href=\"" + url + pref + paramId + "="
      + (offset - length) + this.bindString + "\"> << </a>\n";
   }
   int start;
   int radius = MAX_PAGE_INDEX / 2 * length;
   if (offset < radius) {
    start = 0;
   } else if (offset < size - radius) {
    start = offset - radius;
   } else {
    start = (size / length - MAX_PAGE_INDEX) * length;
   }
   for (int i = start; i < size && i < start + MAX_PAGE_INDEX * length; i += length) {
    if (i == offset) {
     header += "<b>" + (i / length + 1) + "</b>\n";
    } else {
     header += " <a href=\"" + url + pref + paramId + "="
       + i + this.bindString + "\">" + (i / length + 1)
       + "</a>\n";
    }
   }
   if (offset < size - length) {
    header += " <a href=\"" + url + pref + paramId + "="
      + ((int) offset + (int) length) + this.bindString
      + "\"> >> </a>\n";
   }
   header += "</font>";
   return header;
  } else {
   return "";
  }
 }    /**
  * 必然有上一页下下一页情况
  *
  * @return
  */
 public String generate() {
  this.header = "其它查询";
  String pref;
  if (url.indexOf("?") > -1) {
   pref = "&";
  } else {
   pref = "?";
  }
  String header = "<font face=‘Helvetica‘ size=‘-1‘>" + this.header + " ";
  header += " <a href=\"" + url + pref + paramId + "="
    + (offset - 1) + this.bindString + "\"> << </a>\n";
  header += " <a href=\"" + url + pref + paramId + "="
    + (offset + 1) + this.bindString + "\"> >> </a>\n";
  header += "</font>";
  return header;
 }    /**
  * 如果一个页面有两个pager对象,而且单向依赖,就需要把依赖方绑定到被依赖方
  *
  * @param sourcePager
  */
 public void bindPager(Pager sourcePager) {
  bindString = bindString + "&" + sourcePager.paramId + "="
    + sourcePager.offset;
 }  public String getUrl() {
  return url;
 }  public int getLength() {
  return length;
 }  public void setLength(int length) {
  this.length = length;
 }  public int getOffset() {
  return offset;
 }  public void setOffset(int offset) {
  this.offset = offset;
 }  public String getParamId() {
  return paramId;
 }  public void setParamId(String paramId) {
  this.paramId = paramId;
 }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多