package cn.com.base.common.pagination;/**

* 分页基类

*

* @author cary

* @since 2013-1-23 下午3:03:32*/

public classPageable implements java.io.Serializable {private static final long serialVersionUID = 1L;/**

* 每页默认的项数(10)*/

public static final int DEFAULT_ITEMS_PER_PAGE = 10;/**

* 滑动窗口默认的大小(7)*/

public static final int DEFAULT_SLIDER_SIZE = 7;/**

* 表示项数未知(Integer.MAX_VALUE)*/

public static final int UNKNOWN_ITEMS =Integer.MAX_VALUE;/**

* 状态量*/

private int page; //当前页码

private int items; //总共项数

private int itemsPerPage; //每页项数。

private int startRow; //开始条数

private int endRow;//结束条数

/**

* 创建一个分页器,初始项数为无限大UNKNOWN_ITEMS,默认每页显示10项*/

publicPageable() {this(0);

}/**

* 创建一个分页器,初始项数为无限大UNKNOWN_ITEMS,指定每页项数

*

* @param itemsPerPage 每页项数。*/

public Pageable(intitemsPerPage) {this(itemsPerPage, UNKNOWN_ITEMS);

}/**

* 创建一个分页器,初始项数为无限大UNKNOWN_ITEMS,指定每页项数

*

* @param itemsPerPage 每页项数

* @param items 总项数*/

public Pageable(int itemsPerPage, intitems) {this.items = (items >= 0) ? items : 0;this.itemsPerPage = (itemsPerPage > 0) ?itemsPerPage : DEFAULT_ITEMS_PER_PAGE;this.page = calcPage(0);

}/**

* 取得总页数。

*

* @return 总页数*/

public intgetPages() {if (items <= 0) {return 1;

}return (int) Math.ceil((double) items /itemsPerPage);

}/**

* 取得当前页。

*

* @return 当前页*/

public intgetPage() {returnpage;

}/**

* 设置并取得当前页

*

* @param page 当前页

* @return 设置后的当前页*/

public int setPage(intpage) {return (this.page =calcPage(page));

}/**

* 取得总项数。

*

* @return 总项数*/

public intgetItems() {returnitems;

}/**

* 设置并取得总项数。如果指定的总项数小于0,则被看作0

*

* @param items总项数

* @return 设置以后的总项数*/

public int setItems(intitems) {this.items = (items >= 0) ? items : 0;

setPage(page);return this.items;

}/**

* 取得每页项数。

*

* @return 每页项数*/

public intgetItemsPerPage() {returnitemsPerPage;

}/**

* 设置并取得每页项数。如果指定的每页项数小于等于0,则使用默认值DEFAULT_ITEMS_PER_PAGE

* 并调整当前页使之在改变每页项数前后显示相同的项

*

* @param itemsPerPage 每页项数

* @return 设置后的每页项数*/

public int setItemsPerPage(intitemsPerPage) {int tmp = this.itemsPerPage;this.itemsPerPage = (itemsPerPage > 0) ?itemsPerPage : DEFAULT_ITEMS_PER_PAGE;if (page > 0) {

setPage((int) (((double) (page - 1) * tmp) / this.itemsPerPage) + 1);

}return this.itemsPerPage;

}/**

* 取得当前页的长度,即当前页的实际项数。相当于 endIndex() - beginIndex() + 1

*

* @return 当前页的长度*/

public intgetLength() {if (page > 0) {return Math.min(itemsPerPage * page, items) - (itemsPerPage * (page - 1));

}else{return 0;

}

}/**

* 取得首页页码。

*

* @return 首页页码*/

public intgetFirstPage() {return calcPage(1);

}/**

* 取得末页页码。

*

* @return 末页页码*/

public intgetLastPage() {returncalcPage(getPages());

}/**

* 取得前一页页码。

*

* @return 前一页页码*/

public intgetPreviousPage() {return calcPage(page - 1);

}/**

* 取得前n页页码

*

* @param n 前n页

* @return 前n页页码*/

public int getPreviousPage(intn) {return calcPage(page -n);

}/**

* 取得后一页页码。

*

* @return 后一页页码*/

public intgetNextPage() {return calcPage(page + 1);

}/**

* 取得后n页页码。

*

* @param n 后n面

* @return 后n页页码*/

public int getNextPage(intn) {return calcPage(page +n);

}/**

* 判断指定页码是否被禁止,也就是说指定页码超出了范围或等于当前页码。

*

* @param page 页码

* @return boolean 是否为禁止的页码*/

public boolean isDisabledPage(intpage) {return ((page < 1) || (page > getPages()) || (page == this.page));

}/**

* 计算页数,但不改变当前页。

*

* @param page 页码

* @return 返回正确的页码(保证不会出边界)*/

protected int calcPage(intpage) {int pages =getPages();if (pages > 0) {return (page < 1) ? 1 : ((page > pages) ?pages : page);

}return 0;

}/**

* 创建复本。

*

* @return 复本*/

publicObject clone() {try{returnsuper.clone();

}catch(java.lang.CloneNotSupportedException e) {return null; //不可能发生

}

}/**

* @param startRow the startRow to set*/

public void setStartRow(intstartRow) {this.startRow =startRow;

}/**

* @param endRow the endRow to set*/

public void setEndRow(intendRow) {this.endRow =endRow;

}/**

* @return the startRow*/

public intgetStartRow() {if (page > 0) {

startRow= (itemsPerPage * (page - 1)) + 1;

}else{

startRow= 0;

}returnstartRow;

}/**

* @return the endRow*/

public intgetEndRow() {if (page > 0) {

endRow= Math.min(itemsPerPage *page, items);

}else{

endRow= 0;

}returnendRow;

}

}

java.分页上一页下一页算法_一个方便的java分页算法相关推荐

  1. java实现的分页方法(上一页下一页)

    /**按上一页下一页分页的方法    * @param jspName文件名(显示上一页.下一页)    * @param currentPage 当前页    * @param zs 记录总数    ...

  2. php分页不跳转,分页源代码,分页时上一页下一页不显示,但可以跳转

    分页源代码,分页时上一页下一页不显示,但可以跳转 $sql="select * from product where pronum like'%$key%' or pdes like '%$ ...

  3. html分页首页上一页下一页,HTML静态分页(形如:首页,上一页,下一页,尾页)...

    在HTML中有时候我们会用到静态分页,一次拿回一定量的数据结果条目,我们会以形如:第2页,共12页  首页 上一页 下一页 尾页 的方式进行静态分页,以下是该种静态分页的代码,供兄弟姐妹们参考. fu ...

  4. Asp.net(c#)GridView分页时用图片显示上一页,下一页

    Asp.net(c#)GridView分页时用图片显示上一页,下一页 效果展示: 需要的两张图片:    详细代码: Code <%@ Page Language="C#"  ...

  5. html内容页上一页下一页,帝国CMS内容页增加内容分页上一页标签功能!

    帝国CMS一直以来升级没有提供内容分页的上一页标签功能,只有一个:内容页下一页[!--next.page--] 标签!所以下面就是要改造一下这个标签,实现内容页上一页的功能! 步骤如下: 打开e/cl ...

  6. 简单分页,无需插件 实现 上一页|下一页 分页功能

    分页功能 五花八门,插件的使用也很方便.最近做项目,分页功能是写好的了,利用bootstarp 简单实现的, 类似于这种 但由于数据越来越多,这种循环的方式很不好看.于是想到上一页| 下一页 分页 的 ...

  7. layui table 分页 上一页 : 下一页 回调

    layui table 分页回调 上一页 : 下一页 回调 学习类的文章,因为最近需要用到这个,所以作为学习记录一下 回调的参数是 done table.render({elem: '#main',w ...

  8. php分页上一页下一页判断,一个分页函数:显示“上一页下一页”等

    '************************************************** '函数名:ShowPage '作 用:显示"上一页 下一页"等信息 '参 数 ...

  9. Android开发实现上一页,下一页显示内容

    最近写了个上一页下一页显示Demo,感觉还是比较好实现!通过设置listview的每页item显示的个数,然后控制返回item的count实现点击按钮上一页下一页效果. 一,布局文件(若是想实现滑动的 ...

最新文章

  1. eclipse集成processing、PApplet、proclipsing 问题
  2. 布局技巧3:创建高效布局
  3. ARM指令 LDR 和 ADR的一些区别
  4. 4. HTTP Status Code
  5. 内存不足时Android 系统如何Kill进程
  6. arm linux 中文输入法,ARM 安装中文输入法
  7. Java 高级工程师面试题总结-参考答案(已拿Offer)
  8. [渝粤教育] 淄博职业学院 市场营销 参考 资料
  9. APU工业控制领域应用
  10. 2023苏州科技大学计算机考研信息汇总
  11. 六维空间:优秀的教育网IPV6免费资源共享平台!
  12. CodeForces 595A Vitaly and Night
  13. Java实现P5713 【深基3.例5】洛谷团队系统
  14. 7-9 把字符串中的大写字母改成小写字母 (10分)
  15. 为什么建模要尽量用四边面?如何将三边面转化成四边面?
  16. python code for solving eigenvalue problem by Jacobi’s method的代码
  17. QGIS基本功|5 QGIS图层进阶(二)- 连接属性表
  18. 职高高一计算机知识点,职高高一上半学期所有数学公式
  19. channel基本介绍狗朗
  20. 基于java+jsp+mysql的酒店预订系统

热门文章

  1. exif.js 旋转图片
  2. tomcat的卸载与安装
  3. AndroidStudio jni C++与Java互相调用
  4. 十年转型|小草十年庆,暖暖公益情
  5. 树莓派调分辨率 + VNC cannot currently show the desktop 的解决方法
  6. 【转】两个高斯分布函数乘积的理论推导
  7. Windows Server 2016搭建SSTP
  8. c语言给任意字符串最后加一个结束符
  9. [CSP-S模拟测试]:蔬菜(二维莫队)
  10. HTTTP 缓存机制