分页是个说简单就简单,说复杂页不复杂的功能。网上各种分页类多多少少都不符合自己的需求,还是自己写一个吧。
支持一个页面出现多个分页功能:
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通用分页的知识点进行详细说明: 1. 分页的必要性 在实际项目中,数据量可能非常大,直接查询所有...
综上所述,Java实现分页通用代码主要包括创建Page对象、处理分页参数、编写分页SQL、填充Page对象及提供相关辅助方法。在实际项目中,这些组件可以抽象成一个通用的分页工具类或者服务,以提高代码复用性和可维护性...
总结,Java Web项目中的分页通用实现涉及到数据库查询、参数传递、前后端交互等多个环节。通过封装分页组件,我们可以将这些复杂逻辑模块化,便于在不同的项目中复用,从而提升开发质量和效率。这个DEMO正是为了帮助...
通用分页工具类PageInfo.java
为了提高代码复用性,可以使用一些开源的Java分页库,如PageHelper(MyBatis的插件)、Spring Data JPA等。这些库通常提供了更高级的功能,如自动计算总页数、支持排序等。 4. **设计模式**: 一个通用的分页组件...
### Java通用分页方法解析与应用 在Java开发中,特别是在Web应用中,分页功能是数据展示中不可或缺的一部分。合理的分页不仅能够提升用户体验,还能优化服务器性能,避免一次性加载大量数据导致的延迟和资源消耗。...
Java中的数字分页是Web应用开发中常见的需求,特别是在大数据量的展示场景下,为了提高用户体验,需要将数据分批次加载。Struts2框架作为Java Web开发中的热门选择,提供了强大的分页支持。本主题主要讲解如何在...
本文将详细探讨"JAVA写的通用分页"这一主题,结合描述中的"通用高效分页存储过程实现",我们将深入理解Java分页的原理、实现方式以及优化策略。 首先,分页的基本概念是将大量数据分块展示,而不是一次性加载所有...
总结来说,Java实现通用分页涉及数据库查询、自定义分页类、封装分页服务等多个环节。合理利用数据库和应用程序的分页机制,能够有效地管理和展示大量数据,同时提升用户体验。在实际项目中,还需要考虑性能优化、...
这里提到的"对分页进行了封装,PageUtil.java工具类"是一个Java实现的分页辅助类,它的主要目标是简化分页查询的操作,提供更便捷的API给开发者使用。 `PageUtil.java`工具类可能包含了以下功能: 1. **参数处理**...
Java通用分页是一个常见且重要的技术点,尤其在开发大型数据集展示的Web应用时,分页能够有效地提高用户体验并优化服务器性能。本资源提供的"java通用分页含使用文档"是一个jar包,旨在简化Java Web开发中的分页实现...
自己写的分页类,是通用类,可以直接调用。在struts,spring中都没问题
在Java开发中,分页是常见的功能,尤其是在处理大量数据时,为了提高用户体验,需要将数据分批展示。本示例结合Struts和Hibernate框架,通过自定义标签实现了通用的分页功能。以下是对这个主题的详细解释: 一、...
博文链接中的资源《Java通用分页》可能涵盖了关于如何使用这些工具和方法实现Java分页的详细步骤,包括示例代码和最佳实践。在阅读这篇博客时,我们可以学习到如何在实际项目中灵活运用这些分页策略,优化数据查询...
本资源提供了通用的Java分页后端服务代码,可以帮助开发者快速实现数据的分页查询功能。以下是相关知识点的详细说明: 1. **分页概念**:分页是一种将大量数据分成若干小块(页面)来显示的技术,以避免一次性加载...
下面是一个通用的分页公式: ``` 当前页索引 = 每页显示的记录数 * (当前页 - 1) ``` 其中,当前页索引代表当前页的起始记录索引,当前页代表当前页码,每页显示的记录数代表每页显示的记录数。 例如,如果每页显示...
java web通用分页组件发布了! 超级强悍的java web通用分页组件,只要简单的一条sql语句就可以轻松的实现分页,目前对oracle,SQL Server2005,SQL server200,mysql都做了实现,程序通过接口来封装,你可以实现对其他...
"通用分页Jar 配置文件"通常是指一个可复用的Java库,它封装了分页逻辑,使得开发者可以在多个项目中方便地进行数据分页显示。这个库通常会包含配置文件、Java类和相关的资源文件,如TLD(Tag Library Descriptor)...
这个源码提供了一个详细的Java分页实现,非常适合Java开发者学习和参考。 在Java中,分页主要涉及到以下几个关键知识点: 1. **SQL查询**:分页的核心是SQL查询语句,通常使用`LIMIT`和`OFFSET`(MySQL)或者`...
这个我人写的一个纯Java版的分页算法,与平台无关性,具有很好的通用性,同时附带完整的工程; 工程使用SQLServer2005,建表脚本在工程下的Setup中,根据你个人的数据库调整资源文件中的配置即可运行;同时这个算法...