javaweb开发分页工具类

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 储存分页处理工具类 在调用此类的方法之前需设置总页数(即得先从数据库查询到相应数据的数据量)
 * 
 * @author ahomeeye
 * @version 1.0
 */
public class Pagination implements Serializable {

    private static final long serialVersionUID = 1L;
    private int start; // start表示当前页开始的记录数,start=每页行数*(当前页数-1)
    private int end; // 当前页结束的记录行数
    private int totalCount; // 总行数
    private int rowsPerPage = 15; // 每页行数,默认15
    private int currentPage; // 当前页数
    private int pageListSize = 9;// 页码列表大小,默认9
    private List<Integer> pageNumList = new ArrayList<Integer>();

    public Pagination() {
        start = 0;
        end = 0;
        currentPage = 1;
        this.totalCount = 0;
    }

    public Pagination(int totalCount) {
        start = 0;
        end = 0;
        currentPage = 1;
        this.totalCount = totalCount;
    }

    public Pagination(int totalCount, int numPerPage) {
        start = 0;
        end = 0;
        this.totalCount = totalCount;
        currentPage = 1;
        if (numPerPage > 0) {
            rowsPerPage = numPerPage;
        }
    }

    /**
     * 执行翻页动作
     * 
     * @param currentPage
     *            要翻到的目标页码
     * @return 返回翻页对象
     */
    public Pagination doPagination(int currentPage) {
        gotoPage(currentPage);
        return this;
    }

    // 设置起始数
    public int getStart() {
        start = rowsPerPage * (currentPage - 1);
        return start;
    }

    // 得到起始数
    public void setStart(int start) {
        if (start < 0) {
            this.start = 0;
        } else if (start >= this.totalCount) {
            this.start = this.totalCount - 1;
        } else {
            this.start = start;
        }
    }

    // 设置当前页的最后一行的在总记录中的顺序(从0开始)
    public void setEnd(int end) {
        this.end = end;
    }

    // 得到当前页的最后一行的在总记录中的顺序(从0开始)
    public int getEnd() {
        if (rowsPerPage * currentPage > this.totalCount) {
            end = this.totalCount - 1;
        } else {
            end = rowsPerPage * currentPage - 1;
        }
        return end;
    }

    // 以下4个方法供控制器(struts)调用

    // 判断能否到第一页;只要能到上一页,肯定就有第一页
    public boolean firstEnable() {
        return previousEnable();
    }

    // 判断能否到上一页
    public boolean previousEnable() {
        return currentPage > 1;// 只要不是第一页,就能到上一页
    }

    // 判断能否到下一页
    public boolean nextEnable() {
        return currentPage * rowsPerPage < this.totalCount;
    }

    // 判断能否到最后一页;只要有下一页,就肯定有最后一页.
    public boolean lastEnable() {
        return nextEnable();
    }

    // 跳到第一页
    public void firstPage() {
        currentPage = 1;
    }

    // 跳到上一页
    public void previousPage(int cPage) {
        currentPage = (cPage - 1) > 0 ? (cPage - 1) : 1;
    }

    // 跳到下一页
    public void nextPage(int cPage) {
        currentPage = cPage + 1;
        if (currentPage * rowsPerPage > this.totalCount) {
            lastPage();
        }
    }

    // 跳到最后一页
    public void lastPage() {
        if (this.totalCount % rowsPerPage == 0) {
            currentPage = this.totalCount / rowsPerPage;
        } else {
            currentPage = this.totalCount / rowsPerPage + 1;
        }
    }

    // 跳到指定的某一页
    public void gotoPage(int pageNumber) {
        if (pageNumber <= 1) {
            currentPage = 1;
        } else if (getTotalCount() < this.getRowsPerPage()) {
            currentPage = 1;
        } else if (pageNumber * rowsPerPage >= this.totalCount) {
            lastPage();
        } else {
            currentPage = pageNumber;
        }
    }

    // 设置总行数
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    // 得到总行数
    public int getTotalCount() {
        return totalCount;
    }

    // 设置每页行数
    public void setRowsPerPage(int rowsPerPage) {
        this.rowsPerPage = rowsPerPage;
    }

    // 得到每页行数
    public int getRowsPerPage() {
        return rowsPerPage;
    }

    // 得到总页数
    public int getPages() {
        if (this.totalCount % rowsPerPage == 0)
            return this.totalCount / rowsPerPage;
        else
            return this.totalCount / rowsPerPage + 1;
    }

    // 得到当前页数
    public int getCurrentPage() {
        return currentPage;
    }

    // 设置当前页数
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getPageListSize() {
        return pageListSize;
    }

    // 设置页码列表大小
    public void setPageListSize(int pageListSize) {
        this.pageListSize = pageListSize;
    }

    // 得到页面列表
    public List<Integer> getPageNumList() {
        this.pageNumList.removeAll(this.pageNumList);// 设置之前先清空
        int totalPage = getPages();
        if (totalPage > this.pageListSize) {
            int halfSize = this.pageListSize / 2;
            int first = 1;
            int end = 1;
            if (this.currentPage - halfSize < 1) { // 当前页靠近最小数1
                first = 1;
                end = this.pageListSize;
            } else if (totalPage - this.currentPage < halfSize) { // 当前页靠近最大数
                first = totalPage - this.pageListSize + 1;
                end = totalPage;
            } else {
                first = this.currentPage - halfSize;
                end = this.currentPage + halfSize;
            }
            for (int i = first; i <= end; i++) {
                this.pageNumList.add(i);
            }
        } else {
            for (int i = 0; i < totalPage; i++) {
                this.pageNumList.add(i + 1);
            }
        }

        return pageNumList;
    }
}

转自:http://ahomeeye.iteye.com/blog/1174903

posted @ 2015-03-27 10:39  harry_ma  阅读(889)  评论(1编辑  收藏  举报
 aa
    部分内容来自网络,如有异议,请联系我.     


      成绩来自坚持, 灵感来自激情。

                                                               感谢父母和亲朋好友的爱与支持!