分页算法的java类


public class Page {
    /**
     * 一行显示的最大记录数
     */
    public static int MAX_ROW = 15;
    /**
     * 当前开始位置
     */
    private int index;
    /**
     * 总页数
     */
    private int page_num;
    /**
     * 查询的结果集大小
     */
    private int total;
    /**
     * 返回链接
     */
    private String url;

    public Page() {
        index = 0;
        page_num = 1;
        total = 0;
    }

    public int getTotal() {
        return total;
    }
    public int getIndex() {
        return index;
    }
    public int getPageNum() {
        return page_num;
    }
    public void setTotal(int num) {
        total = num;
        if (total % MAX_ROW == 0) {
            page_num = total / MAX_ROW;
        }
        else {
            page_num = total / MAX_ROW + 1;
        }
    }
    /**
     * 在文本中插入页面标号为num的标记
     * @param text
     * @param num 起始位置
     */
    private void insertTag(StringBuffer text, int num) {
        int temp = index / MAX_ROW;
        if (num == temp) {
            text.append(num + 1).append("  ");
        }
        else {
            text.append("<a href=" + url + "&start_index=");
            text.append(num * MAX_ROW).append(">").append(num + 1).append("</a>  ");
        }
    }

    /**
     * 在文本中插入位置为起始位置为num,页面标号为str的标记
     * @param text
     * @param num 起始位置
     * @param str 页面编号
     */
    private void insertTag(StringBuffer text, int num, String str) {
        text.append("<a href=" + url + "&start_index=");
        text.append(num).append(">").append(str).append("</a>  ");
    }

    public String getFooter() {
        if (total <= MAX_ROW) {
            return "";
        }
        StringBuffer str = new StringBuffer("分页:");
        if (page_num <= MAX_ROW) {
            for (int i = 0; i < page_num; i++) {
                insertTag(str, i);
            }
            if (index + MAX_ROW < total) {
                insertTag(str, index + MAX_ROW, "下一页");
            }
            else {
                str.append("下一页");
            }
            return str.toString();
        }
        else {
            int unit = MAX_ROW * MAX_ROW;
            if (index < unit) {
                int i;
                for (i = 0; i < MAX_ROW; i++) {
                    insertTag(str, i);
                }
                String tt = "下" + MAX_ROW + "页";
                insertTag(str, i * MAX_ROW, tt);
                return str.toString();
            }
            else { //处理在中间或最后10页的问题
                //page表示页;section表示多个页组成的面
                //当前页面所在的页号。
                int currentPage = index / MAX_ROW;
                //当前页所在的面
                int currentSection = currentPage / MAX_ROW + 1;
                //上一面的开始页
                int lastPage = (currentSection - 1) * MAX_ROW - 1;
                //上一面的开始页的开始项的编号
                int lastPageRow = lastPage * MAX_ROW;
                //下一面的开始页编号
                int nextPage = currentSection * MAX_ROW;
                //下一面的开始页的开始项的编号
                int nextPageRow = nextPage * MAX_ROW;
                String tt = "上" + MAX_ROW + "页";
                insertTag(str, lastPageRow, tt);
                //如果还有下一面
                if (nextPageRow <= total - 1) {
                    for (int i = 0; i < MAX_ROW; i++) {
                        insertTag(str, i + lastPage + 1);
                    }
                    tt = "下" + MAX_ROW + "页";
                    insertTag(str, nextPageRow, tt);
                }
                else { //如果没有下一面

                    //当前面的页面总数
                    int lengthOfPage = total - (lastPage + 1) * MAX_ROW;


                    //原来代码为lengthOfPage = lengthOfPage / MAX_ROW+1 ;
                    //现在为
                    //  if(lengthOfPage%MAX_ROW==0){
                    //      lengthOfPage = lengthOfPage / MAX_ROW;
                    //  }else{
                    //      lengthOfPage = lengthOfPage / MAX_ROW+1;
                    //  }
                    if(lengthOfPage%MAX_ROW==0){
                        lengthOfPage = lengthOfPage / MAX_ROW;
                    }else{
                        lengthOfPage = lengthOfPage / MAX_ROW+1;
                    }


                    for (int i = 0; i < lengthOfPage; i++) {
                        insertTag(str, i + 1 + lastPage);
                    }
                }
                return str.toString();

            }
        }
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public void setIndex(int index) {
        this.index = index;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值