package com.yzr.utils; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.SimpleTagSupport; /** * 分页标签 * * @author 伊昭荣 * @Time 2013年6月2日 22:45:58 */ public class PageTag extends SimpleTagSupport { /** * 总记录数,默认为0 */ private Integer count = 0; /** * 总页数 */ private Integer pageCount; /** * 当前页,默认设置为1 */ private Integer page = 1; /** * 每页显示的条数,默认显示10条 */ private Integer rows = 10; /** * 页面链接 */ private String url; /** * 页面参数名称,默认为page */ private String params = "page"; /** * 显示给前台的东西 */ @Override public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); StringBuffer pageList = new StringBuffer(); pageCount = (pageCount == null || pageCount < 1) ? 0 : pageCount; /** * 计算当前总页数 */ pageCount = count % rows > 0 ? count / rows + 1 : count / rows; page = (page == null || page < 1 || page > pageCount) ? 1 : page; pageList.append("<div class=\"pagination\">"); /** * 当总页数大于1 */ if (pageCount > 1) { pageList.append("<div class=\"pagination-pages\">"); pageList.append("<div class=\"pagination-page\">"); /** * 显示上一页 */ if (page > 1) { pageList.append("<a class=\"page-prev\" "); pageList.append("href=\"" + url + "?"); pageList.append("" + params + "=" + (page - 1) + "\""); pageList.append("title=\"上一页\">"); pageList.append("<span>上一页</span></a>"); } /** * 总页数小于10,全部显示 */ if (pageCount <= 10) { for (int i = 1; i <= pageCount; i++) { /** * 不是当前页 */ if (i != page) { pageList.append("<a class=\"page\" title=\"第" + i + "页\""); pageList.append("href=\"" + url + "?"); pageList.append("" + params + "=" + i + "\">" + i + "</a>"); } else { /** * 是当前页 */ pageList.append("<span class=\"page-cur\">" + i + "</span>"); } } } else { /** * 总页数大于10,分情况显示 */ int i = page - 3 <= 2 ? 1 : page - 3; int end = page + 3 > pageCount ? pageCount : page + 3; /** * 当前页加上3页不到7页时显示7页 */ end = end > 7 ? end : 7; i = end == pageCount ? pageCount - 7 : i; /** * 显示第1、2页 */ if (i > 2) { for (int j = 1; j < 3; j++) { pageList.append("<a class=\"page\" title=\"第" + j + "页\""); pageList.append("href=\"" + url + "?"); pageList.append("" + params + "=" + j + "\">" + j + "</a>"); } if (page - 3 > 3) pageList.append("<span class=\"page-split\">...</span>"); } for (; i <= end; i++) { /** * 不是当前页 */ if (i != page) { pageList.append("<a class=\"page\" title=\"第" + i + "页\""); pageList.append("href=\"" + url + "?"); pageList.append("" + params + "=" + i + "\">" + i + "</a>"); } else { /** * 是当前页 */ pageList.append("<span class=\"page-cur\">" + i + "</span>"); } } if (end < pageCount) { if (end + 1 < pageCount) pageList.append("<span class=\"page-split\">...</span>"); pageList.append("<a class=\"page\" title=\"第" + pageCount + "页\""); pageList.append("href=\"" + url + "?"); pageList.append("" + params + "=" + pageCount + "\">" + pageCount + "</a>"); } } /** * 当总页数大于1,当前页小于总页数时,下一页可点 */ if (page < pageCount) { pageList.append("<a class=\"page-next\""); pageList.append("href=\"" + url + "?"); pageList.append("" + params + "=" + (page + 1) + "\""); pageList.append("title=\"下一页\">"); pageList.append("<span>下一页</span>"); pageList.append("</a>"); } pageList.append("</div>"); /** * 显示总页数 */ pageList.append("<div class=\"pagination-count\">"); pageList.append("<span>共</span>"); pageList.append("<span class=\"b\">" + pageCount != null ? pageCount : 0 + "</span>"); pageList.append("<span>页</span>"); pageList.append("</div>"); /** * 进行页面跳转 */ int nextPage = page + 1 > pageCount ? pageCount : page + 1; pageList.append("<div class=\"pagination-form\"><span>向第</span>"); pageList.append("<input type=\"text\" name=\"page\" value=\"" + nextPage + "\" class=\"page-num\">"); pageList.append("<span>页</span><a href=\"javascript:getPage('" + url + "')\" class=\"btn\">跳转</a></div>"); } else { pageList.append("<div class=\"pagination-noData\">没有相关数据</div>"); } pageList.append("</div>"); out.write(pageList.toString()); } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public Integer getPageCount() { return pageCount; } public void setPageCount(Integer pageCount) { this.pageCount = pageCount; } public Integer getPage() { return page; } public void setPage(Integer page) { this.page = page; } public Integer getRows() { return rows; } public void setRows(Integer rows) { this.rows = rows; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getParams() { return params; } public void setParams(String params) { this.params = params; } }
page.tld文件
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"> <tlib-version>1.0</tlib-version> <short-name>p</short-name> <uri>/WEB-INF/tlds/page</uri> <tag> <name>page</name> <tag-class>com.yzr.utils.PageTag</tag-class> <body-content>empty</body-content> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> </attribute> <attribute> <name>count</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>pageCount</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>page</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>rows</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>params</name> <rtexprvalue>false</rtexprvalue> <type>java.lang.String</type> </attribute> </tag> </taglib>
package com.yzr.servlet; import java.io.*; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; @WebServlet(name = "PagesServlet", urlPatterns = { "/PagesServlet.go" }) public class PagesServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String curr = request.getParameter("page"); if (curr == null) { curr = "1"; } request.setAttribute("page", curr); RequestDispatcher rd = request.getRequestDispatcher("page.jsp"); rd.forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } public String getServletInfo() { return "Short description"; } }
page.jsp文件
<%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib prefix="p" uri="/WEB-INF/tlds/page.tld"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> <link rel="stylesheet" type="text/css" href="css/page.css"> <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script> <script type="text/javascript" src="js/page.js"></script> </head> <body> <h1>JSP Page</h1> <p:page url="PagesServlet.go" page="${page}" count="1001" /> <p> </p> </body> </html>
相关推荐
自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签...
本篇文章将详细讲解如何创建并使用一个Java自定义分页标签。 首先,我们需要了解什么是自定义标签(Custom Tags)。在JSP中,自定义标签是一种扩展JSP功能的方法,它允许开发者封装复杂的逻辑或组件,以标签的形式...
通过学习和理解这些代码,你可以更好地掌握自定义分页标签的实现方式,并将其应用于自己的项目中。 总结来说,自定义Java分页标签是一种高效的方法,可以让你在JSP中轻松实现带条件的分页查询。通过这种方式,你...
本文将深入探讨如何在Java环境中自定义分页标签,以及涉及到的相关技术点。 首先,我们需要理解分页的基本原理。分页通常由两个主要部分组成:前端展示和后端处理。前端负责展示分页导航,如当前页、总页数、页码等...
本资源提供的就是一个自定义分页标签的例子,它可以帮助我们更便捷地在页面上实现数据的分页显示。 分页是大型Web应用中常见的功能,特别是在处理大量数据时,如电商网站的产品列表、论坛的帖子等。自定义分页标签...
总的来说,自定义分页标签提供了一种强大且灵活的方法,使Java开发者能够以声明式的方式处理分页,避免在每个页面都编写重复的分页逻辑。这样的自定义标签可以极大地提高代码的可读性和可维护性,是构建复杂Web应用...
本资源详细介绍了如何在Struts2中自定义分页标签,使得开发过程更加便捷。 在Struts2中,分页通常涉及到以下几个关键步骤: 1. **创建Action类**:首先,你需要创建一个Action类,该类将处理用户的请求,包括获取...
本自定义分页标签源代码提供了一种解决方案,它独立于数据库操作,仅处理分页逻辑,允许开发者专注于数据获取和展示。接下来,我们将详细讨论相关知识点。 1. **自定义标签**: 自定义标签是JSP中的一种特性,允许...
`pagesetDemo`这个文件名可能是示例项目的名称,里面包含了使用这个自定义分页标签的演示代码。 创建Java自定义标签通常包括以下几个步骤: 1. **定义标签处理类**:这是自定义标签的核心,需要继承`javax.servlet...
例如,对于分页标签,我们可能有`pageSize`和`currentPage`等属性,而在`jspTld`文件中,我们将为这些属性指定对应的Java类型和默认值。 总的来说,通过结合JSP和Java自定义标签,我们可以构建高度定制的、可复用的...
"自定义标签分页用法.png"和"自定义标签分页用法(带伪).png"提供了图形化的说明,展示了如何在JSP页面中使用这个分页标签。这些图片可能包含了标签的语法示例,如`<fenye:pagination ... />`,以及如何传递参数,...
总的来说,自定义分页标签在Java企业项目中起到了关键作用,它提高了代码的可读性和可维护性,同时也简化了页面展示的复杂性。通过SSH框架的整合和自定义标签的实现,开发者可以更高效地处理大规模数据的分页展示。