分页通用代码

来源:互联网 发布:网络诈骗存在的原因 编辑:程序博客网 时间:2024/06/04 18:46

public class Page {
    /**
     * 当前是第几页
     */
    private int curPage; //当前是第几页

    /**
     * 一共有多少页
     */
    private int maxPage; //一共有多少页

    /**
     * 一共有多少条记录(行)
     */
    private int maxRowCount; //一共有多少行

    /**
     * 每页显示多少行
     */
    private int rowsPerPage; //每页显示多少行

    /**
     * 当前页面要显示的数据列表(包含数据库返回对象的列表)
     */
    private List list; //当前页面显示的数据

    /**
     * 提交的表单的名称
     */
    private String formName = "pageForm";//提交的表单名称

    /**
     * 显示分页的前台页面路径名称
     */
    private String target = "";

    /**
     * 默认每页显示记录数
     */
    private static int ROWS_PER_PAGE = 15;

    /**
     * 分页信息初始化,每页显示记录数使用默认值
     * 
     */
    public Page() {
        this.curPage = 1;
        this.maxPage = 1;
        this.maxRowCount = 0;
        this.rowsPerPage = ROWS_PER_PAGE;
    }

    /**
     * <p>
     * 设置当前分页页面要显示的数据对象列表
     * </p>
     *
     * <p>
     * 该对象可以是一个实现了 List 接口的任意列表
     * </p>
     *
     * @param list -
     *            实现了 List 接口的任意列表
     */
    public void setList(List list) {
        this.list = list;
    }

    /**
     * 获取要在当前分页页面显示的数据对象列表
     *
     * @return 要显示在前台页面的数据对象列表
     */
    public List getList() {
        return this.list;
    }

    /**
     * 设置记录的总行数(即所有满足条件的纪录总数)
     *
     * @param maxRowCount -
     *            记录的总行数
     */
    public void setMaxRowCount(int maxRowCount) {
        this.maxRowCount = maxRowCount;
    }

    /**
     * 获取记录的最大行数
     *
     * @return - 满足条件的所有记录条数
     */
    public int getMaxRowCount() {
        return this.maxRowCount;
    }

    /**
     * 设置当前页数(即要显示在前台的当前页数)
     *
     * @param curPage -
     *            当前页数
     */
    public void setCurPage(int curPage) {
        this.curPage = curPage;
    }

    /**
     * 返回在前台显示的当前页数
     *
     * @return - 当前页数
     */
    public int getCurPage() {
        return this.curPage;
    }

    /**
     * <p>
     * 设置每页显示的记录条数
     * </p>
     * <p>
     * 注意:如果每页显示的记录条数小于等于 0 ,则每页显示的记录条数将置为默认值
     * </p>
     *
     * @param rows -
     *            每页显示的记录条数
     */
    public void setRowsPerPage(int rows) {
        if (rows > 0) {
            this.rowsPerPage = rows;
        } else {
            this.rowsPerPage = ROWS_PER_PAGE;
        }
    }

    /**
     * 设置页面提交表单的名称,默认为 pageForm,在一般情况下,使用默认值就能正常使用
     *
     * @param formName -
     *            提交表单的名称
     */
    public void setFormName(String formName) {
        this.formName = formName;
    }

    /**
     * 设置显示分页的前台页面路径名称
     *
     * @param target -
     *            分页页面路径名称
     */
    public void setTarget(String target) {
        this.target = target;
    }

    /**
     * 获取每页显示的记录条数
     *
     * @return - 每页显示的记录条数
     */
    public int getRowsPerPage() {
        return this.rowsPerPage;
    }

    /**
     * 根据记录总数和每页显示的记录条数,计算总共有多少页
     * 
     */
    public void setMaxPage() {
        if (this.maxRowCount % this.rowsPerPage == 0) {
            this.maxPage = this.maxRowCount / this.rowsPerPage;
        } else {
            this.maxPage = this.maxRowCount / this.rowsPerPage + 1;
        }
    }

    /**
     * 获取根据记录总数和每页显示的记录数计算得出的总页数
     *
     * @return - 记录总页数
     */
    public int getMaxPage() {
        return this.maxPage;
    }

    /**
     * 获取前台分页页面提交表单的名称
     *
     * @return - 提交表单的名称
     */
    public String getFormName() {
        return this.formName;
    }

    /**
     * 获取前台分页页面的路径名称
     *
     * @return - 前台分页页面的路径名称
     */
    public String getTarget() {
        return this.target;
    }

    /**
     * 获取默认每页显示的记录条数
     *
     * @return - 默认每页显示的记录条数
     */
    public int getDefaultRowsPerPage() {
        return ROWS_PER_PAGE;
    }

    /**
     * 根据前台分页页面名称和相关分页信息,获取前台页面提交表单和页面信息的 HTML 代码
     *
     * @param aUrl -
     *            前台分页页面的路径名称
     * @return - 前台页面提交表单和页面信息的 HTML 代码
     */
    public String getPageStr(String aUrl) {

        String strFirstPage = "首页";
        String strLastPage = "末页";
        String strNextPage = "下一页";
        String strPrevPage = "上一页";
        String strCurrentPage = "页次";
        String strGoto = "转至:";

        StringBuffer strPages = new StringBuffer();

        //跳转脚本
        strPages.append("<script language='JavaScript'>/r/n");
        strPages.append("<!--/r/n");
        strPages.append("function Jumping(){ /r/n/t");
        strPages.append("document." + formName + ".submit();/r/n/t");
        strPages.append("return ;/r/n");
        strPages.append("}/r/n");

        strPages.append("function gotoPage(pagenum){ /r/n/t");
        strPages.append("document." + formName
                + ".pageSize.value = pagenum;/r/n/t");
        strPages.append("document." + formName + ".submit();/r/n/t");
        strPages.append("return ;/r/n");
        strPages.append("}/r/n");
        strPages.append("-->/r/n");
        strPages.append("/r/n</script>/r/n");

        strPages.append("<table border=0 align=center>/r/n");
        strPages.append("<form name=" + formName + " action=" + aUrl
                + " method=post>/r/n");
        strPages.append("<tr>/r/n/t<td>/r/n/t/t");
        strPages.append("<b>共 <font color=#930909>" + this.getMaxRowCount()
                + "</font> 条记录</b> /r/n/t");

        if (getMaxPage() == 1 || getMaxRowCount() == 0) {
            strPages
                    .append("/t<font face=webdings color=#930909>9</font><font color=#930909><b>"
                            + strFirstPage + "</b></font>/r/n/t");
            strPages
                    .append("/t<font face=webdings color=#930909>7</font><font color=#930909><b>"
                            + strPrevPage + "</b></font>/r/n/t");
            strPages
                    .append("/t<font color=#930909><b>"
                            + strNextPage
                            + "</b></font><font face=webdings color=#930909>8</font>/r/n/t");
            strPages
                    .append("/t<font color=#930909><b>"
                            + strLastPage
                            + "</b></font><font face=webdings color=#930909>:</font>/r/n/t");
        } else if (getMaxPage() > 1 && getCurPage() == 1) {
            strPages
                    .append("/t<font face=webdings color=#930909>9</font><font color=#930909><b>"
                            + strFirstPage + "</b></font>/r/n/t");
            strPages
                    .append("/t<font face=webdings color=#930909>7</font><font color=#930909><b>"
                            + strPrevPage + "</b></font>/r/n/t");
            strPages.append("/t<a href=/"javascript:gotoPage("
                    + (getCurPage() + 1) + ")/"><font color=black><b>"
                    + strNextPage
                    + "</b></font></a><font face=webdings>8</font>/r/n/t");
            strPages.append("/t<a href=/"javascript:gotoPage(" + getMaxPage()
                    + ")/"><font color=black><b>" + strLastPage
                    + "</b></font></a><font face=webdings>:</font>/r/n/t");
        } else if (getMaxPage() > 1 && getCurPage() < getMaxPage()) {
            strPages
                    .append("/t<font face=webdings>9</font><a href=/"javascript:gotoPage(1)/"><font color=black><b>"
                            + strFirstPage + "</b></font></a>/r/n/t");
            strPages
                    .append("/t<font face=webdings>7</font><a href=/"javascript:gotoPage("
                            + (getCurPage() - 1)
                            + ")/"><font color=black><b>"
                            + strPrevPage + "</b></font></a>/r/n/t");
            strPages.append("/t<a href=/"javascript:gotoPage("
                    + (getCurPage() + 1) + ")/"><font color=black><b>"
                    + strNextPage
                    + "</b></font></a><font face=webdings>8</font>/r/n/t");
            strPages.append("/t<a href=/"javascript:gotoPage(" + getMaxPage()
                    + ")/"><font color=black><b>" + strLastPage
                    + "</b></font></a><font face=webdings>:</font>/r/n/t");
        } else if (getMaxPage() > 1 && getCurPage() == getMaxPage()) {
            strPages
                    .append("/t<font face=webdings>9</font><a href=/"javascript:gotoPage(1)/"><font color=black><b>"
                            + strFirstPage + "</b></font></a>/r/n/t");
            strPages
                    .append("/t<font face=webdings>7</font><a href=/"javascript:gotoPage("
                            + (getCurPage() - 1)
                            + ")/"><font color=black><b>"
                            + strPrevPage + "</b></font></a>/r/n/t");
            strPages
                    .append("/t<font color=#930909><b>"
                            + strNextPage
                            + "</b></font><font face=webdings color=#930909>8</font>/r/n/t");
            strPages
                    .append("/t<font color=#930909><b>"
                            + strLastPage
                            + "</b></font><font face=webdings color=#930909>:</font>/r/n/t");
        }
        //        strPages.append("/t<font color=black><b>转至:</b></font>/r/n/t/t<input
        // type='text' name='page' size=4 maxlength=4 value=" +
        //                        getCurPage() +
        //                        " onKeyDown = /"javaScript:return dFilter(event.keyCode,this);/"" +
        //                        ">" +
        //                        "/r/n/t/t<input type='submit' value='Go' name='cndok'>/r/n/t");
        //----------------------------------------------------------------------]
        //显示 n 条记录(行)/页
        //strPages.append("/t <b><font color=#930909>" + getRowsPerPage()
        // +
        //"</font> 条记录(行)/页</b>/r/n/t");
        //----------------------------------------------------------------------
        strPages
                .append("/t<font color=black><b>"
                        + strGoto
                        + "</b></font>/r/n/t/t<select name='pageSize' onchange='Jumping()'>");

        for (int i = 1; i <= this.getMaxPage(); i++) {
            if (i == this.getCurPage()) {
                strPages.append("/r/n/t/t/t<option selected value=" + i + ">第 "
                        + i + " 页</option>");
            } else {
                strPages.append("/r/n/t/t/t<option value=" + i + ">第 " + i
                        + " 页</option>");
            }
        }

        strPages.append("/r/n/t/t</select>/r/n/t");

        strPages
                .append("/t<font color=black><b>"
                        + strCurrentPage
                        + ":</b></font><font color=#930909><b>"
                        + getCurPage()
                        + "</b></font>/r/n/t/t<font color=black><b>/</b></font>/r/n/t/t<font color=#930909><b>"
                        + getMaxPage()
                        + "</b></font><font color=black><b> 页 </b></font>");

        strPages.append("/r/n/t<td>/r/n<tr>/r/n</form>/r/n</table>");

        return strPages.toString();
    }

    /**
     * <p>
     * 根据Page 类的 target 属性和分页相关信息,获取前台页面提交表单和页面信息的 HTML 代码
     * </p>
     * <p>
     * 注意:使用该方法之前,必须设置 Page 类的 target属性
     * </p>
     *
     * @return - 前台页面提交表单和页面信息的 HTML 代码
     */
    public String getPageStr() {
        return this.getPageStr(target);
    }

    /**
     * 打印 Page 对象的当前信息
     */
    public String toString() {
        return "当前是第 " + curPage + " 页;共有 " + maxPage + " 页,共 " + maxRowCount
                + " 条记录(行);每页 " + rowsPerPage + " 条记录(行)";
    }
}


public Page getStudentList(String page) {

  ResultSet rst = null;
  ArrayList list = new ArrayList();
  int pageNum;
  if (page == null || page.equals("")) pageNum = 1;
  else pageNum = Integer.parseInt(page);

  p.setRowsPerPage(6);  //每页显示6行
                         
  String s1 = "select top " + pageNum * p.getRowsPerPage() + " * from table where ...."; 

  String s2 = "select count(*) from table where ...";
                         
  pstmt = conn.prepareStatement(s2);
  rst = pstmt.executeQuery();                              
  if (rst.next()) p.setMaxRowCount(rst.getInt(1));  //取得一共的行数
                       
  pstmt = null;
  rst = null;
  pstmt = conn.prepareStatement(s1, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
  rst = pstmt.executeQuery();

  int i = (pageNum - 1) * p.getRowsPerPage();    //
  if (i != 0) rst.absolute(i);
  while (rst.next()) {
    ...
    list.add(...);       
  }
  p.setCurPage(pageNum);  //第几页
  p.setList(list);        //list
  p.setMaxPage();         //最大页数

  return p;
}


特殊用法:
public Page searchGroup(Group group, int pageSize) throws DaoException {
        Page page = new Page();
        try {
            Session session = HibernateUtil.currentSession();
            HibernateUtil.beginTransaction();
            Example exampleGroup = Example.create(group);
            exampleGroup.ignoreCase().enableLike(MatchMode.ANYWHERE);
            //exampleGroup.excludeZeroes();
            Criteria criteria = session.createCriteria(Group.class).add(
                    exampleGroup).addOrder(Order.asc("groupCreateDate"));

            List list = criteria.list();

            page.setMaxRowCount(list.size());

            //page.setRowsPerPage(2);

            page.setMaxPage();

            page.setFormName("groupInfoForm");

            Debug.println("记录的总页数为:" + page.getMaxPage());

            //判断如果分页数大于最大页数,则将页数设置为第一页
            if (pageSize > page.getMaxPage() || pageSize < 0) {

                Debug.println("警告:请求的分页数 " +
                              pageSize + " 大于该记录的总页数 " +
                              page.getMaxPage() +
                              " 或者小于 0 ,请求的页数将置为 1 。");
                pageSize = 1;

            }

            //设置当前页数
            page.setCurPage(pageSize);

            list = criteria.setMaxResults(page.getRowsPerPage())
                   .setFirstResult((pageSize - 1) * page.getRowsPerPage())
                   .list();
            page.setList(list);

            HibernateUtil.commitTransaction();
        } catch (HibernateException ex) {
            HibernateUtil.rollbackTransaction();
        } finally {
            HibernateUtil.closeSession();
        }
        return page;


Page page = groupService.getGroupList(1);

page.setTarget(request.getContextPath() + "/group/EditGroup.jsp");

request.setAttribute("groupPageList",page);

jsp页面用法:

<%
  String strpage = request.getParameter("Page");
  int PageNum;
  if (strpage != null) {
    PageNum = Integer.parseInt(strpage);
  }
  else {
    PageNum = 1;
  }
  Page pagelist = new Page();
  pagelist = SimpleGroup.getGroupLists(PageNum);
  //request.setAttribute("gps", pagelist.getList());
  List groupList = pagelist.getList();
%>

<%
for(int i=0;<groupList.size();i++){
Group group = (Group)groupList.get(i);
out.println(group.getName());
}
%>

//生成前台分页信息
<%
  if (pagelist.getList() != null) {
    out.print(pagelist.pageStr("/"viewGroups.jsp/""));
  }
%>