package entity;

public class Page { //记录当前页的状态信息
private int num; //当前页号,采用自然数计数 1,2,3,...
private int size; //一页显示多少个数据
private int rowCount; //记录的总数目(一共有多少个数据)
private int pageCount; //页面总数(n页)
private int startRow; //当前页开始行号,第一行是0行
private int first=1; //第一页 页号
private int last; //最后页 页号
private int next; //下一页 页号
private int prev; //前一页 页号
private int start; // 页号式导航, 起始页号
private int end; // 页号式导航, 结束页号
private int numCount = 4; // 页号式导航, 最多显示页号数量为numCount+1;这里显示5页。

public Page(int size, String str_num, int rowCount) {

int num = 1;
if (str_num != null) { //str_num,起始记录号
num = Integer.parseInt(str_num);
}
this.num = num;
this.size = size;
this.rowCount = rowCount;
this.pageCount = (int) Math.ceil((double) rowCount / size); //**获取页数的总数,ceil是进1取整
this.num = Math.min(this.num, pageCount); //当前页号最大值为pageCount
this.num = Math.max(1, this.num); //当前页号最小值为1
this.startRow = (this.num-1) * size; //开始行号为 0行
this.last = this.pageCount; //最后一页页号为pageCount
this.next = Math.min(this.pageCount, this.num+1); //最后一页为pageCount或者为当前页+1
this.prev = Math.max(1, this.num-1); //最前一页为1或者为当前页-1

// 计算page 控制
//当点击7的时候只出现5到9,当点击8的时候,只出现6到10
//若是出现1-5或者6-10,则可改为:if((this.num+1)%(numCount+1)==0){
//start=(this.num+1)%(numCount+1)-1*(numCount+1)+1;}
//else{ start=this.num/(numCount+1)*(numCount+1)+1;}
//比如15和14
//本页显示页号从多少页开始,eg:7-4/2=5(第七页就是从第五页开始)
start = Math.max(this.num - numCount/2, first); 

//本页显示页号在多少页号结束 eg:5+4=9(若本页是第七页,则本页开始页为5,结束页为9,每页显示5个)
end = Math.min(start + numCount, last);
if (end - start < numCount) { //如果记录数小于4
start = Math.max(end - numCount, 1); //开始页为1和结束页号-记录数的最大值
}
}

public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getStartRow() {
return startRow;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public int getLast() {
return last;
}
public void setLast(int last) {
this.last = last;
}
public int getNext() {
return next;
}
public void setNext(int next) {
this.next = next;
}
public int getPrev() {
return prev;
}
public void setPrev(int prev) {
this.prev = prev;
}
public int getStart() {
return start;
}

public void setStart(int start) {
this.start = start;
}

public int getEnd() {
return end;
}

public void setEnd(int end) {
this.end = end;
}

public int getNumCount() {
return numCount;
}

public void setNumCount(int numCount) {
this.numCount = numCount;
}
}

  也可参考http://www.cnblogs.com/liushuijinger/p/3271815.html

java分页的更多相关文章

  1. 数据你把它的金额-JAVA分页

    数据量你造吗-JAVA分页 原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),须要转载的,保留下! Thanks 学习的心态第一,解行要对应. 事实 ...

  2. 浅谈Java分页技术

    话不多言.我们要实现java分页技术,我们首先就需要定义四个变量,他们是: int  pageSize;//每页显示多少条记录 int pageNow;//希望现实第几页 int pageCount; ...

  3. 一个方便的java分页算法

    一个好用的java分页算法,代码如下,只需要分页参数继承Pageable类就可以很方便分页了 package cn.com.base.common.pagination; /** * 分页基类 * * ...

  4. [Java] 一种好的JAVA分页实现

    喃都不说了,贴代码,意思都在代码里面了 Page.java //分页类.定义分页字段信息,供前台页面使用 package com.core.common; import java.util.List; ...

  5. JAVA 分页工具类及其使用

    Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...

  6. pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页

    java 后台代码实现分页 demo 实力 自己写的 标签分页 package com.cszoc.sockstore.util; import java.util.HashMap;import ja ...

  7. java 分页功能

    1.分页工具类 package com.bw.shop.util; import java.util.List; import com.sun.org.apache.regexp.internal.r ...

  8. Java分页需求

    近期在实现项目接口时,经常需要分页功能.有时返回“String”,有时是“Object”格式的分页List.针对这种情况,本人用java实现对List分页. 第一版 package org.sun.j ...

  9. java分页问题

    问题一:所有数据分页显示后 点击下一页跳转到第二页后 填写查询条件在点击查询按钮,分页出现问题(页码有问题) 默认没有从第一页开始显示 解决方案:问题出在取的当前页有问题,把当前页设置为第一页(0), ...

  10. Java 分页通用

    1.定义分页模型:PageModel package com.common.page; import java.util.List; /** * 封装分页信息 * @author Administra ...

随机推荐

  1. 如何替换orcl实例下的四个数据库

    1,drop 数据库对应的用户 2,创建新的表空间 新的用户 3,导入新的数据库 imp grid_sysdb/sagis@klmy file=F:\data\addr_interestpoint.d ...

  2. 022医疗项目-模块二:药品目录的导入导出-对XSSF导出excel类进行封装

    资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类 ...

  3. 【转】【WPF】WPF样式(Style)—触发器

    样式(Styles)由三部分构成:设置器(Setter).触发器(Triggers).资源(Resources). (1)触发器,让样式的使用更加准确.灵活和高效. (2)触发器(Triggers)主 ...

  4. 【转】【C#】【Thread】【Task】多线程

    多线程 多线程在4.0中被简化了很多,仅仅只需要用到System.Threading.Tasks.::.Task类,下面就来详细介绍下Task类的使用. 一.简单使用 开启一个线程,执行循环方法,返回 ...

  5. ruby 元编程

    一 对象模型 kernel Module Kernel.private_instance_methods.grep(/^pr/)   private method 1 如果一个方法接收者不是你自己,一 ...

  6. [QoS]cisco3560限速配置案例-收集于网工泡泡

    网络中常用到这些:CISCO和H3C-MAC过滤+端口限速+端口镜像+端口隔离 不同的方式不同的思想:嘎嘎 其他各个厂商的限速链接:http://pan.baidu.com/s/1hrIMoSG 密码 ...

  7. WorldWind源码剖析系列:BMNG类构造函数深入分析

    BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括 ...

  8. easyui-combobox的取值问题

    例子:<select id="cc" class="easyui-combobox" name="cc" style="wi ...

  9. MySql系列:中文写入数据库出现错误java.sql.SQLException: Incorrect string value: '\xE5\xxxx' for column 'xxxx' at row 1及其解决方法

    在将kft-activiti-demo的数据库连接改为mysql之后,可以正常登陆,但是在新建请假流程的时候出现如下错误:   Caused by: java.sql.SQLException: In ...

  10. 学习笔记——Maven实战(六)Gradle,构建工具的未来?

    Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们 ...