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分页之页面分页的更多相关文章

  1. 分页技术框架(Pager-taglib)学习一(页面分页)

    一.Pager-taglib简介     1.Pager-taglib,支持多种风格的分页显示.实际上她是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合,会形成多 ...

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

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

  3. 基于视觉的Web页面分页算法VIPS的实现源代码下载

    基于视觉的Web页面分页算法VIPS的实现源代码下载 - tingya的专栏 - 博客频道 - CSDN.NET 基于视觉的Web页面分页算法VIPS的实现源代码下载 分类: 技术杂烩 2006-04 ...

  4. js 将很长的内容进行页面分页显示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 菜鸟学Java(十)——分页查询

    今天继续跟大家说说一些非常基础的东西,这次我们说说分页查询.说到分页,可能很多人都听说过什么真分页.假分页的.简单解释一下,拿第二页,每页20条为例:真分:数据库里取 的就是21-40条:假分:数据库 ...

  6. Java代码实现真分页

    在JavaWeb项目中,分页是一个非常常见且重要的一个小方面.本次作为记载和学习,记录项目中出现的分页并做好学习记录.在这里,用的是SSH框架.框架可以理解如下图: 在JSP页面,描写的代码如下: & ...

  7. 【jQuery 分页】jQuery分页功能的实现

    自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部  和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...

  8. EasyUI表格DataGrid前端分页和后端分页的总结

    Demo简介 Demo使用Java.Servlet为后台代码(数据库已添加数据),前端使用EasyUI框架,后台直接返回JSON数据给页面 1.配置Web.xml文件 <?xml version ...

  9. Spring MVC和Spring Data JPA之按条件查询和分页(kkpaper分页组件)

    推荐视频:尚硅谷Spring Data JPA视频教程,一学就会,百度一下就有, 后台代码:在DAO层继承Spring Data JPA的PagingAndSortingRepository接口实现的 ...

随机推荐

  1. HDU_3496_(二维费用背包)

    Watch The Movie Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...

  2. MFC_1.3 控件子类化 消息反射

    控件子类化 如果想要在默认的控件类中添加一些功能,就需要子类化一个控件类 在类内可以响应控件所有的消息,并且可以添加自己的函数和数据 通过类向导子类化控件的步骤 打开类向导,创建一个 MFC 类,不要 ...

  3. Jmeter之重定向请求

    一.自动重定向和跟随重定向的区别 自动重定向:状态码一般是200.20X.当重定向自动跳转时,只针对GET和Head请求,自动重定向自动跳转到最终目标页面,当HTTP请求为自动重定向时,JMeter不 ...

  4. 扩增子分析解读5物种注释 OTU表操作

    本节课程,需要先完成<扩增子分析解读>系列之前的操作 1质控 实验设计 双端序列合并 2提取barcode 质控及样品拆分 切除扩增引物 3格式转换 去冗余 聚类 4去嵌合体 非细菌序列 ...

  5. laydate.js 月份区间选择插件

    laydate.render({ elem: '#reservation2' , type: 'month' , range: true, //format: '2018/09', theme: '# ...

  6. vue组件---动态组件之多标签页面

    首先看下效果图 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...

  7. BZOJ3124: [Sdoi2013]直径 (树形DP)

    题意:给一颗树 第一问求直径 第二问求有多少条边是所有直径都含有的 题解:求直径就不说了 解第二问需要自己摸索出一些性质 任意记录一条直径后 跑这条直径的每一个点  如果以这个点不经过直径能到达最远的 ...

  8. 12Cookie、Session

    12Cookie.Session-2018/07/24 1.保存会话数据 cookie客户端技术,把每个用户的数据以cookie的形式写给用户各自的浏览器 HttpSession服务端技术,服务器运行 ...

  9. (C/C++学习)19.单目标遗传算法的C程序实现

    说明:在学习生活中,经常会遇到各种各样的最优问题,其中最常见的就是求某个多维(多个自变量)函数在各个自变量各取何值时的最大值或最小值:例如求函数 f(x) = (x-5)2+(y-6)2+(z-7)2 ...

  10. chrome浏览器安装网页测试插件postman的图文介绍

    用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介绍的这款网页调试工具不仅可以 ...