欢迎光临
我们一直在努力

贴一个偶写的分页类-JSP教程,Jsp/Servlet

建站超值云服务器,限时71元/月

抽象类
==========================================================
import java.util.arraylist;
import java.sql.connection;
import java.sql.resultset;

import com.xxx.util.dbtool;

/**
* <pre>
* 分页类.默认页面大小为20
* 这是一个抽象类。子类需要重构方法selresult()
* </pre>
*/
public abstract class pagelist {

  /** 以下成员变量在子类中可视 */
  protected final static int min_page_size = 20;  //默认页面大小
  protected int pagesize;                         //页面大小
  protected int curpage;                          //当前页页码
  protected int prepage;                          //上一页页码
  protected int nxtpage;                          //下一页页码
  protected int totalpage;                        //总页码数
  protected int totalitem;                        //总条目数
  protected string sql;                           //选择条件
  protected arraylist result;                     //结果集
  protected int from;                             //开始的游标位置

  /** 私有变量 */
  private boolean hasfindresult = false;          //标志是否已经查找了结果
                                                  //保证loadresult只进行一次

  /**
   * 构造器.默认页面大小为20
   * @param sql
   * @param pageno
   */
  public pagelist(string sql, int pageno) {
    init(sql, min_page_size, pageno);
  }

  /**
   * 构造器
   * @param sql 条件sql
   * @param pagesize 页面大小
   * @param pageno 页码
   */
  public pagelist(string sql, int pagesize, int pageno) {
    init(sql, pagesize, pageno);
  }

  protected void init(string sql, int pagesize, int pageno) {
    this.sql = sql;
    this.pagesize = (pagesize<=0?min_page_size:pagesize);
    this.curpage = (pageno<=0?1:pageno);
  }

  /**
   * 获取页面大小
   */
  public int getpagesize() {
    if (!this.hasfindresult) {
      this.loadresult();
    }
    return this.pagesize;
  }

  /**
   * 获取当前页码
   */
  public int getcurpage() {
    if (!this.hasfindresult) {
      this.loadresult();
    }
    return this.curpage;
  }

  /**
   * 获取前一页的页码
   */
  public int getprepage() {
    if (!this.hasfindresult) {
      this.loadresult();
    }
    return this.prepage;
  }

  /**
   * 获取后一页的页码
   */
  public int getnxtpage() {
    if (!this.hasfindresult) {
      this.loadresult();
    }
    return this.nxtpage;
  }

  /**
   * 获取页码总数
   */
  public int gettotalpage() {
    if (!this.hasfindresult) {
      this.loadresult();
    }
    return this.totalpage;
  }

  /**
   * 获取总条数
   */
  public int gettotalitem() {
    if (!this.hasfindresult) {
      this.loadresult();
    }
    return this.totalitem;
  }

  /**
   * 判断是否有页面
   * @return 如果总页面数为0,那么返回false;否则true
   */
  public boolean haspages() {
    if (!this.hasfindresult) {
      this.loadresult();
    }
    return (this.totalpage != 0);
  }

  /**
   * 获取指定页面的结果集
   *
   * @return 指定页面结果集;如果没有则返回空集
   */
  public arraylist getresult() {
    if (!this.hasfindresult) {
      this.loadresult();
    }
    return this.result;
  }

  /**
   * 选出结果
   */
  protected abstract arraylist selresult();

  /**
   * 计算页码信息并且得到结果集.
   * 是calculatepagenoinfo和selresult的组合
   */
  private void loadresult() {
    //1.计算页码相关信息
    this.calculatepagenoinfo();
    //2.选出结果
    this.result = this.selresult();
    if (this.result == null) {
      this.result = new arraylist();
    }
    //3. 保证loadresult()只进行一次
    hasfindresult = true;
  }

  /**
   * 计算页码相关信息 calculate
   */
  private void calculatepagenoinfo() {
    //1. 获取总条目数量
    this.totalitem = totalitem();
    //2. 计算页码信息
    //2.1 总页数
    if (this.totalitem == 0) {
      this.totalpage = 0;
    } else {
      this.totalpage = (this.totalitem-1) / this.pagesize + 1;
    }
    //2.2 当前页,前页,后页
    if (this.totalpage == 0) {
      this.curpage = 0;
      this.prepage = 0;
      this.nxtpage = 0;
      this.from    = 0;
    } else {
      this.curpage = (this.curpage>this.totalpage?this.totalpage:this.curpage);
      this.prepage = ((this.curpage-1<1)?1:(this.curpage-1));
      this.nxtpage = ((this.curpage==this.totalpage)?this.curpage:(this.curpage+1));
      this.from = (this.curpage-1)*this.pagesize;
    }
  }

  /**
   * 获取总条目数量
   */
  private int totalitem() {
    //access db
    int count = 0;
    dbtooldb = new dbtool();
    resultset rs = null;
    db.conndb();
    rs = db.advquery(this.sql);
    try {
      while (rs.next()) {
        count++;
      }
    } catch (exception e) {
    }
    db.closedb();
    return count;
  }

}
//~

使用
===========================================================
假设我有一个news实体对象,现在要构造一个news相关的分页类

如下:

import java.sql.connection;
import java.sql.resultset;
import java.sql.sqlexception;

import com.xxx.util.dbtool;
import com.bokesoft.util.pagelist;
import com.bokesoft.util.dateutil;

/**
* 新闻分页类
*/
public class newspagelist extends pagelist {

  public newspagelist(string sql, int pageno) {
    super(sql, pageno);
  }

  public newspagelist(string sql, int pagesize, int pageno) {
    super(sql, pagesize, pageno);
  }

  protected java.util.arraylist selresult() {
    java.util.arraylist result = new java.util.arraylist(this.pagesize);

    if (this.totalitem == 0) {
      return result;
    }

    news news = null;
    dbtool db = new dbtool();
    resultset rs = null;
    db.conndb();
    rs = db.advquery(this.sql);

    if (rs != null) {
      try { //一旦有异常被捕捉就结束循环
        int count = 1;
        if (this.curpage > 1) {
          rs.absolute(this.from);   //跳转到开始行
        }
        while (rs.next() && count<=pagesize) {
          //循环构造news对象,然后加入列表中
          news = new news();
          news.setid(rs.getstring("code")==null?"":rs.getstring("code"));

          ……

          result.add(news);
          count++;
        }
      } catch (exception e) {
      } finally {
        try { if (rs != null) rs.close();} catch (sqlexception sqle) {}
      }
    }
    db.closedb();
    return result;
  }
}
//~

客户程序的使用(jsp中)
========================================================
<%
  //获得跳转的页码和显示条目数量以及选择条件
  //…
  //int ipageno
  //int ipagesize
  //string sqlcond

  //这里是具体使用分页类的部分,非常简单
  newspagelist npl = new newspagelist(sqlcond, ipagesize, ipageno);
  java.util.arraylist resultlist = npl.getresult();
  int totalpage = npl.gettotalpage();

  news news = null;
  int size = resultlist.size();
  for (int i=0; i<size; i++) {
    news = (news)resultlist.get(i);
    //…..
  }

%>

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 贴一个偶写的分页类-JSP教程,Jsp/Servlet
分享到: 更多 (0)

相关推荐

  • 暂无文章