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. 简单的beego分页功能代码

    一个简单的beego分页小插件(源代码在最下面): 支持条件查询 支持参数保留 支持自定义css样式 支持表/视图 支持参数自定义 默认为pno 支持定义生成链接的个数 使用方式: 1)action中 ...

  2. java 分页功能

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

  3. java开发功能代码汇总

    多文件上传 http://smotive.iteye.com/blog/1903606 java 常用代码 Struts2 前后台(Action ,jsp)传值.取值 Action public Li ...

  4. hibernate和struts2实现分页功能

    1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO { public List<Person> queryB ...

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

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

  6. Django【进阶】分页功能Pagination

    项目中,我们需要很多非业务逻辑的功能,例如分页功能,而且此类功能移植性很好,可以在不同的项目中使用,所以整理好这些功能会一定程度上提高开发效率,下面是分页功能代码,使用时,可单独放在utils目录 & ...

  7. 原生js实现分页功能

    原生就是实现分页功能 代码如下: var pagination = function(option,fun){ this.parentId = option.id; //容器 this.pageSiz ...

  8. Java Web -【分页功能】详解

    分页简介 分页功能在网页中是非常常见的一个功能,其作用也就是将数据分割成多个页面来进行显示. 使用场景: 当取到的数据量达到一定的时候,就需要使用分页来进行数据分割. 当我们不使用分页功能的时候,会面 ...

  9. 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架

    问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...

随机推荐

  1. Codeforces 500 E. New Year Domino

    \(>Codeforces \space 500 E. New Year Domino<\) 题目大意 : 数轴上有序排列着 \(n\) 块多米诺骨牌, 第 \(i\) 块骨牌坐标为 \( ...

  2. AGC 014 B - Unplanned Queries

    题面在这里! 很显然的一件事是,我们把路径覆盖改成两个点分别到根的路径覆盖,答案是不会变的,因为lca以上被覆盖了两次不变奇偶性.. 这么做的好处就是,我们只需要考虑每个点的覆盖次数带来的影响就行了, ...

  3. 【DFS】Paintball(6-22)

    [UVA11853]Paintball 算法入门经典第6章6-22(P175) 题目大意:有一个1000*1000的正方形战场,西南角坐标(0,0),西北角坐标(0,1000),有n个敌人,每个敌人处 ...

  4. 【Java】【滚动数组】【动态规划】UVA - 11137 - Ingenuous Cubrency

    滚动数组优化自己画一下就明白了. http://blog.csdn.net/u014800748/article/details/45849217 解题思路:本题利用递推关系解决.建立一个多段图,定义 ...

  5. Android手机 "已安装了存在签名冲突的同名数据包"

    如果你不是开发者:如果你在android上更新一个已经安装过较早版本软件时,安装到最后一步提示你:已安装了存在签名冲突的同名数据包,然后安装失败.这是因为旧版软件的签名信息与新版不一致造成的.你可以卸 ...

  6. [NOIp2016提高组]蚯蚓

    题目大意: 给你n个不同长度蚯蚓,每秒从里面取出最长的砍下u/v变成两只,又把剩下的加长q. 问你在m之前的t,2t,3t...的时间上,砍的蚯蚓长度, 以及m秒后剩下所有的蚯蚓长度. 思路: 很容易 ...

  7. 2016.4.3NOI上较难的动规题目(仔细分析样例)--王老师讲课整理

    1.NOI 191:钉子和小球 总时间限制: 1000ms 内存限制:  65536kB 描述 有一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1).每 ...

  8. AIM Tech Round (Div. 1) D. Birthday 数学 暴力

    D. Birthday 题目连接: http://www.codeforces.com/contest/623/problem/D Description A MIPT student named M ...

  9. javacripr基础总结

    js中一切皆为对象 方法=函数 其实也是内建对象 函数都可以用,包括数组,函数 都可以获取 核心dom编程 -- dom d document文档 o 对象 1用户自定义对象, 2内建对象  如Arr ...

  10. PTCSolution 关注

      2013.12.28更新: 经过几次整理和再次租赁下线,点击数明显增加,现在995下线点击数3413.再将2页半的点击数低的下线替换掉,AVG肯定超过4. 这么短的时间整理效果如此明显是我没有想到 ...