分页是个说简单就简单,说复杂页不复杂的功能。网上各种分页类多多少少都不符合自己的需求,还是自己写一个吧。
支持一个页面出现多个分页功能:
import javax.servlet.http.HttpServletRequest; /** * 分页实用类 * * @author shuzheng * @version 2014/04/21 * */ public class Pager { /** * 生成简单的分页页面内容 * * @param total 总记录数 * @param size 每页记录数 * @param step 最多显示分页页数 * @param page 当前页数 * @param request 请求request * @return 分页的HTML代码 */ public static String getSimplePages(int total, int size, int step, int page, HttpServletRequest request, String paramName) { // 根据request获取当前url,包括参数,如果有已存在名称未paramname的参数,剔除掉,后面会追加新的参数 String url = request.getContextPath() + request.getServletPath(); String query = request.getQueryString(); if (query != null) { String params = ""; String[] querys = query.split("&"); for (int i = 0 ; i < querys.length ; i ++) { if (querys[i].startsWith(paramName)) continue; if (params.equals("")) params += querys[i]; else params += "&" + querys[i]; } if (!params.equals("")) url += "?" + params; } // 结果html String pages = ""; int pageCount = (int) Math.ceil((double) total / size);// 求总页数 if (pageCount == 1) { return pages; } if (page > pageCount) { page = pageCount;// 如果分页变量大总页数,则将分页变量设计为总页数 } if (page <= 0) { page = 1;// 如果分页变量小于1,则将分页变量设为1 } // 显示上一页 if (page > 1) { if (url.contains("?")) { pages = pages.concat("<a class=\"prev\" href=\"" + url + "&" + paramName + "=" + (page - 1) + "\">上一页</a>\n"); } else { pages = pages.concat("<a class=\"prev\" href=\"" + url + "?" + paramName + "=" + (page - 1) + "\">上一页</a>\n"); } } else { pages = pages.concat("<a class=\"prev\" href=\"javascript:;\" style=\"color:#ccc\">上一页</a>\n"); } // 显示分页码 int listBegin = (page - (int) Math.floor((double) step / 2));//从第几页开始显示分页信息 if (listBegin < 1) { listBegin = 1; } //显示第1页 if (listBegin >= 2) { if (url.contains("?")) { pages = pages.concat("<a href=\"" + url + "&" + paramName + "=1\">1</a> ... \n"); } else { pages = pages.concat("<a href=\"" + url + "?" + paramName + "=1\">1</a> ... \n"); } } //当前页数右侧还有未显示页码时 if (pageCount - page >= page - listBegin) { for (int i = listBegin; i < (listBegin + step); i++) { if (i != page) { if (url.contains("?")) { pages = pages.concat("<a href=\"" + url + "&" + paramName + "=" + i + "\">" + i + "</a>\n"); } else { pages = pages.concat("<a href=\"" + url + "?" + paramName + "=" + i + "\">" + i + "</a>\n"); } } else { pages = pages.concat("<span class=\"current\">" + i + "</span>\n"); } } //显示最后1页 if (listBegin + step <= pageCount) { if (url.contains("?")) { pages = pages.concat(" ... <a href=\"" + url + "&" + paramName + "=" + pageCount + "\">" + pageCount + "</a>\n"); } else { pages = pages.concat(" ... <a href=\"" + url + "?" + paramName + "=" + pageCount + "\">" + pageCount + "</a>\n"); } } } else { // 显示最后剩余的几个页码 for (int i = (pageCount-step) + 1; i <= pageCount; i++) { if (i != page) { if (url.contains("?")) { pages = pages.concat("<a href=\"" + url + "&" + paramName + "=" + i + "\">" + i + "</a>\n"); } else { pages = pages.concat("<a href=\"" + url + "?" + paramName + "=" + i + "\">" + i + "</a>\n"); } } else { pages = pages.concat("<span class=\"current\">" + i + "</span>\n"); } } } // 显示下一页 if (page < pageCount) { if (url.contains("?")) { pages = pages.concat("<a class=\"next\" href=\"" + url + "&" + paramName + "=" + (page + 1) + "\">下一页</a>\n"); } else { pages = pages.concat("<a class=\"next\" href=\"" + url + "?" + paramName + "=" + (page + 1) + "\">下一页</a>\n"); } } else { pages = pages.concat("<a class=\"next\" href=\"javascript:;\" style=\"color:#ccc\">下一页</a>\n"); } return pages; } }
使用方法:
public String test() { // 分页 int total = 10; //总记录数 int size = 1; //每页记录数 int step = 7; //最多显示分页页数 int p1 = StringUtil.toInt(request.getParameter("p1")); //当前页数 int p2 = StringUtil.toInt(request.getParameter("p2")); //当前页数 int p3 = StringUtil.toInt(request.getParameter("p3")); //当前页数 int p4 = StringUtil.toInt(request.getParameter("p4")); //当前页数 return Pager.getSimplePages(total, size, step, p1, request, "p1") + "\n\n<br/><br/>\n\n" + Pager.getSimplePages(total, size, step, p2, request, "p2") + "\n\n<br/><br/>\n\n" + Pager.getSimplePages(total, size, step, p3, request, "p3") + "\n\n<br/><br/>\n\n" + Pager.getSimplePages(total, size, step, p4, request, "p4"); }
结果如图所示:
相关推荐
java 通用分页java 通用分页java 通用分页java 通用分页
Java 分页的通用代码,包含page 类和方法等。
通用分页工具类PageInfo.java
自己写的分页类,是通用类,可以直接调用。在struts,spring中都没问题
java web项目的分页,包括后台分页,前台分页,对一些人来说,是一件困难的事情。我把价值800万的项目中用到分页,抽出来,单独做了一个DEMO,希望对大家有用。
java通用分页代码实例,适用于任何一种数据库,方便,快捷,可移植性高,简单易懂。
strut2 的带数字的通用分页,在需要的页面导入分页的jsp 在分页的jsp里面,注释写的多,
还不错的通用的分页方法,你一定会有所收获
结合struts hibernate 自定义标签实现分页 可通用
通用java分页后端服务代码,前段请自行实现。
Java 通用分页 Java 通用分页 Java 通用分页 Java 通用分页
通用高效分页存储过程实现,欢迎高手指点 含数据库脚本,经测试通过
java web通用分页组件发布了! 超级强悍的java web通用分页组件,只要简单的一条sql语句就可以轻松的实现分页,目前对oracle,SQL Server2005,SQL server200,mysql都做了实现,程序通过接口来封装,你可以实现对其他...
这是一个通用的分页jar包,有了它在jsp页面中直接一个便签就可以把分页引入进来,无需在向以前一样手工写分页的代码..
这个我人写的一个纯Java版的分页算法,与平台无关性,具有很好的通用性,同时附带完整的工程; 工程使用SQLServer2005,建表脚本在工程下的Setup中,根据你个人的数据库调整资源文件中的配置即可运行;同时这个算法...
一个通用的数据库分页类
java web mysql 通用分页
非常通用的分页算法java实现,源代码仅供参考
通用分页Jar 配置文件