java分页之页面分页
import java.util.ArrayList;
import java.util.List; /**
*
* @author cheney
*
* @date Aug 31, 2012
*/
public class PageModel<T> {
private int page = 1; // 当前页
public int totalPages = 0; // 总页数
private int pageRecorders;// 每页5条数据
private int totalRows = 0; // 总数据数
private int pageStartRow = 0;// 每页的起始数
private int pageEndRow = 0; // 每页显示数据的终止数
private boolean hasNextPage = false; // 是否有下一页
private boolean hasPreviousPage = false; // 是否有前一页
private List<T> list; /**
*
* @param list
* @param pageRecorders
*/
public PageModel(List<T> list, int pageRecorders) {
init(list, pageRecorders);// 通过对象集,记录总数划分
} /** */
/**
* 初始化list,并告之该list每页的记录数
*
* @param list
* @param pageRecorders
*/
public void init(List<T> list, int pageRecorders) {
this.pageRecorders = pageRecorders;
this.list = list;
totalRows = list.size(); hasPreviousPage = false; if ((totalRows % pageRecorders) == 0) {
totalPages = totalRows / pageRecorders;
} else {
totalPages = totalRows / pageRecorders + 1;
} if (page >= totalPages) {
hasNextPage = false;
} else {
hasNextPage = true;
} if (totalRows < pageRecorders) {
this.pageStartRow = 0;
this.pageEndRow = totalRows;
} else {
this.pageStartRow = 0;
this.pageEndRow = pageRecorders;
}
} public String displayForPage(String method) {
StringBuffer sb = new StringBuffer();
sb.append("<div class=\"w-page\"><label class=\"fr\">"); // 判断是否有上一页
if (this.isHasPreviousPage()) {
sb.append("<a href=\"javascript:void(0)\" onclick=\"" + method
+ "('" + String.valueOf(this.getPage() - 1)
+ "');return false;\">上一页</a>");
} else {
sb.append("<span class=\"disabled\">上一页</span>");
} // 中间显示
for (int i = 1; i <= this.getTotalPages(); i++) {
String spanClzz = "<a href=\"javascript:void(0)\" onclick=\""
+ method + "('" + String.valueOf(i) + "');return false;\">"
+ i + "</a>"; if (this.page == i) {
spanClzz = "<span class='current'>" + i + "</span>";
}
sb.append(spanClzz); // 当大于9页数的时候才进行分页显示
if (this.getTotalPages() - 2 > 7) {
if (i == 5) {
i = this.getTotalPages() - 2;
sb.append("...");
}
}
}
// 判断是否有下一页
if (this.isHasNextPage()) {
sb.append("<a href=\"javascript:void(0)\" onclick=\"" + method
+ "('" + String.valueOf(this.getPage() + 1)
+ "');return false;\">下一页</a>"); } else {
sb.append("<span class=\"disabled\">下一页</span>");
} sb.append("</div>");
return sb.toString();
} public String displayForPage() {
StringBuffer sb = new StringBuffer();
sb.append("<div class=\"w-page\"><label class=\"fr\">"); // 判断是否有上一页
if (this.isHasPreviousPage()) {
sb
.append("<a href=\"javascript:void(0)\" onclick=\"findDistResult('"
+ String.valueOf(this.getPage() - 1)
+ "');return false;\">上一页</a>");
} else {
sb.append("<span class=\"disabled\">上一页</span>");
} // 中间显示
for (int i = 1; i <= this.getTotalPages(); i++) {
String spanClzz = "<a href=\"javascript:void(0)\" onclick=\"findDistResult('"
+ String.valueOf(i) + "');return false;\">" + i + "</a>"; if (this.page == i) {
spanClzz = "<span class='current'>" + i + "</span>";
}
sb.append(spanClzz); // 当大于9页数的时候才进行分页显示
if (this.getTotalPages() - 2 > 7) {
if (i == 5) {
i = this.getTotalPages() - 2;
sb.append("...");
}
}
}
// 判断是否有下一页
if (this.isHasNextPage()) {
sb
.append("<a href=\"javascript:void(0)\" onclick=\"findDistResult('"
+ String.valueOf(this.getPage() + 1)
+ "');return false;\">下一页</a>"); } else {
sb.append("<span class=\"disabled\">下一页</span>");
} sb.append("</div>");
return sb.toString();
} // 判断要不要分页
public boolean isNext() {
return list.size() > 5;
} public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
} /**
*
* @return
*/
public List<T> getNextPage() {
page = page + 1;
disposePage();
return getObjects(page);
} /**
* 处理分页
*/
private void disposePage() {
if (page == 0) {
page = 1;
}
if ((page - 1) > 0) {
hasPreviousPage = true;
} else {
hasPreviousPage = false;
} if (page >= totalPages) {
hasNextPage = false;
} else {
hasNextPage = true;
}
} /**
* 上一页
*
* @return
*/
public List<T> getPreviousPage() {
page = page - 1; if ((page - 1) > 0) {
hasPreviousPage = true;
} else {
hasPreviousPage = false;
}
if (page >= totalPages) {
hasNextPage = false;
} else {
hasNextPage = true;
}
return getObjects(page);
} /**
* 获取第几页的内容
*
* @param page
* @return
*/
public List<T> getObjects(int page) {
if (page == 0) {
this.setPage(1);
page = 1;
} else {
this.setPage(page);
} this.disposePage(); if (page * pageRecorders < totalRows) {// 判断是否为最后一页
pageEndRow = page * pageRecorders;
pageStartRow = pageEndRow - pageRecorders;
} else {
pageEndRow = totalRows;
pageStartRow = pageRecorders * (totalPages - 1);
} List<T> objects = null;
if (!list.isEmpty()) {
objects = list.subList(pageStartRow, pageEndRow);
}
return objects;
} /**
* 第一页
*
* @return
*/
public List<T> getFistPage() {
if (this.isNext()) {
return list.subList(0, pageRecorders);
} else {
return list;
}
} /**
* @return the page
*/
public int getPage() {
return page;
} /**
* @param page
* the page to set
*/
public void setPage(int page) {
this.page = page;
} /**
* @return the totalPages
*/
public int getTotalPages() {
return totalPages;
} /**
* @param totalPages
* the totalPages to set
*/
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
} /**
* @return the pageRecorders
*/
public int getPageRecorders() {
return pageRecorders;
} /**
* @param pageRecorders
* the pageRecorders to set
*/
public void setPageRecorders(int pageRecorders) {
this.pageRecorders = pageRecorders;
} /**
* @return the totalRows
*/
public int getTotalRows() {
return totalRows;
} /**
* @param totalRows
* the totalRows to set
*/
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
} /**
* @return the pageStartRow
*/
public int getPageStartRow() {
return pageStartRow;
} /**
* @param pageStartRow
* the pageStartRow to set
*/
public void setPageStartRow(int pageStartRow) {
this.pageStartRow = pageStartRow;
} /**
* @return the pageEndRow
*/
public int getPageEndRow() {
return pageEndRow;
} /**
* @param pageEndRow
* the pageEndRow to set
*/
public void setPageEndRow(int pageEndRow) {
this.pageEndRow = pageEndRow;
} /**
* @return the hasNextPage
*/
public boolean isHasNextPage() {
return hasNextPage;
} /**
* @param hasNextPage
* the hasNextPage to set
*/
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
} /**
* @return the list
*/
public List<T> getList() {
return list;
} /**
* @param list
* the list to set
*/
public void setList(List<T> list) {
this.list = list;
} /**
* @return the hasPreviousPage
*/
public boolean isHasPreviousPage() {
return hasPreviousPage;
} /*
*
* @param args
*/
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("h");
list.add("i");
list.add("j"); System.out.println(list.size()); PageModel<String> pm = new PageModel<String>(list, 3);// 每页显示条数 pm.getObjects(1); System.out.println(pm.displayForPage("disResult"));
} }
java分页之页面分页的更多相关文章
- 分页技术框架(Pager-taglib)学习一(页面分页)
一.Pager-taglib简介 1.Pager-taglib,支持多种风格的分页显示.实际上她是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合,会形成多 ...
- pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
java 后台代码实现分页 demo 实力 自己写的 标签分页 package com.cszoc.sockstore.util; import java.util.HashMap;import ja ...
- 基于视觉的Web页面分页算法VIPS的实现源代码下载
基于视觉的Web页面分页算法VIPS的实现源代码下载 - tingya的专栏 - 博客频道 - CSDN.NET 基于视觉的Web页面分页算法VIPS的实现源代码下载 分类: 技术杂烩 2006-04 ...
- js 将很长的内容进行页面分页显示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 菜鸟学Java(十)——分页查询
今天继续跟大家说说一些非常基础的东西,这次我们说说分页查询.说到分页,可能很多人都听说过什么真分页.假分页的.简单解释一下,拿第二页,每页20条为例:真分:数据库里取 的就是21-40条:假分:数据库 ...
- Java代码实现真分页
在JavaWeb项目中,分页是一个非常常见且重要的一个小方面.本次作为记载和学习,记录项目中出现的分页并做好学习记录.在这里,用的是SSH框架.框架可以理解如下图: 在JSP页面,描写的代码如下: & ...
- 【jQuery 分页】jQuery分页功能的实现
自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部 和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...
- EasyUI表格DataGrid前端分页和后端分页的总结
Demo简介 Demo使用Java.Servlet为后台代码(数据库已添加数据),前端使用EasyUI框架,后台直接返回JSON数据给页面 1.配置Web.xml文件 <?xml version ...
- Spring MVC和Spring Data JPA之按条件查询和分页(kkpaper分页组件)
推荐视频:尚硅谷Spring Data JPA视频教程,一学就会,百度一下就有, 后台代码:在DAO层继承Spring Data JPA的PagingAndSortingRepository接口实现的 ...
随机推荐
- 通过Maven将指定Jar包下载到指定的本地目录
现在大家大部分都通过Maven等工具来管理包,但是特殊情况下还是需要将包下载到本地.我们可以通过maven命令来完成这个需求.创建一个pom.xml文件,文件内容如下: <?xml versio ...
- 前端axios发送的数据后端接收不到(没有自动依赖注入)可能的原因
前端请求头content-type没有进行正确设置,后端无法解析该类型数据,比如说: 后端若想接收json类型的数据,则需要配置相应的转换器,(spring中可使用@RequestBody注解),若没 ...
- Linux系统硬软信息
系统硬软信息 //获取根用户权限su //升级内核 yum update kernel
- Leetcode加一 (java、python3)
加一 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. Given ...
- Java笔记——String、StringBuffer和StringBuilder类
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符串序列是不可改变的,直至这个对象被销毁. StringBuffer对象则代表一个字符序列可变的字符串,当一个S ...
- Python之UDP编程
参考原文 廖雪峰Python教程 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口 ...
- Extjs定时操作
查看api可知: // 启动一个简单的时钟任务,每秒执行一次更新一个 div var task = { run: function(){ Ext.fly('clock').update(new Dat ...
- 动态 SQL(2)
前面我们学习了使用动态 SQL 的 if.where.trim元素来处理一些简单查询操作,但对于一些 SQL 语句中含有 in 条件,需要迭代条件集合来生成的情况,我们就需要使用 foreach 标签 ...
- Django 缓存之配置Redis
一.cache介绍 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存. 缓存工作原理:缓存是将一些常用的数据保存内存或 ...
- linux whereis-查找二进制程序、代码等相关文件路径
推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 whereis命令用来定位指令的二进制程序.源代码文件和man手册页等相关文件的路径. whereis命令只能用于程序名的搜索,而且 ...