package com.spring.web.tag;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.log4j.Logger;
public class PageTag extends TagSupport {
Logger log = Logger.getLogger(PageTag.class);
/**
*
*/
private static final long serialVersionUID = 1L;
private int total;// 总记录数
private int currentPage = 1;// 当前页
private int pageSize = 10;// 每页显示信息数
private int showNum = 20;// 显示链接数
private String css = "";
private String style = "";
private final static String PARAM = "<input type=\"hidden\" id=\"currentPage\" name=\"currentPage\">" +
"<script type=\"text/javascript\">function do_page(p){document.getElementById(\"currentPage\").value=p;document.forms[0].submit();}</script>";
@Override
public int doStartTag() throws JspException {
String html = "";
if (total > 0)
html = html();
else
html = "<div style=\"text-align:right;padding-top:5px;padding-right:5px;\">未找到数据</div>";
try {
this.pageContext.getOut().print(html);
} catch (IOException e) {
log.error(e.getMessage());
e.printStackTrace();
}
return super.doStartTag();
}
private String html() {
String page = this.pageContext.getRequest().getParameter("currentPage");
log.debug("currentPage:"+ page);
if (page != null && page.length() > 0){
this.currentPage= Integer.parseInt(page);
}
int totalPage = this.totalPage();
StringBuffer result = new StringBuffer();
if (css.trim().length() == 0 && this.style.trim().length() == 0){
result.append("<div style=\"text-align:right;padding-top:5px;padding-right:5px;\">");
}else{
result.append("<div class=\"" + css + "\" style=\""+ style +"\">");
}
result.append("<div class=\"" + css + "\" style=\""+ style +"\">");
result.append(PARAM);
result.append("搜索到"+ this.total + "/" + totalPage +"条记录: ");
if (this.currentPage > 1){
result.append("<a href=\"javascript:do_page(1);\">首页</a> ");
result.append("<a href=\"javascript:do_page(" + previousPage() + ");\">上页</a> ");
}
String link = " <a href=\"javascript:do_page({0});\">{1}</a> ";
List<Integer> list = new ArrayList<Integer>();
if (totalPage <= showNum) {
for (int i = 1; i <= totalPage; i++) {
list.add(i);
}
} else {
Integer left = 0, right = 0;
if(showNum % 2 == 0){
left = showNum / 2 - 1;
right = showNum / 2;
}else{
left = (showNum -1) / 2;
right = (showNum -1) / 2;
}
if (currentPage - left < 1) {
for (int i = 1; i <= showNum; i++) {
list.add(i);
}
} else {
if (currentPage + right >= totalPage) {
for (int i = totalPage - showNum + 1; i <= totalPage; i++) {
list.add(i);
}
} else {
for (int i = currentPage - left; i <= currentPage + right; i++) {
list.add(i);
}
}
}
}
result.append("(");
MessageFormat fmt = new MessageFormat(link);
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == currentPage) {
result.append(" "+ list.get(i) +" ");
} else {
Object [] p = {list.get(i), list.get(i)};
result.append(fmt.format(p));
}
}
result.append(")");
if (this.currentPage < totalPage){
result.append(" <a href=\"javascript:do_page(" + nextPage() + ");\">下页</a> ");
result.append(" <a href=\"javascript:do_page(" + totalPage + ");\">末页</a> ");
}
result.append("</div>");
return result.toString();
}
private int previousPage() {
if (this.currentPage == 1) {
return 1;
} else {
return this.currentPage - 1;
}
}
private int nextPage() {
if (this.currentPage == totalPage()) {
return totalPage();
} else {
return this.currentPage + 1;
}
}
private int totalPage() {
if (this.total <= this.pageSize){
return 1;
}
if (this.total % this.pageSize == 0) {
return this.total / this.pageSize;
} else {
return this.total / this.pageSize + 1;
}
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String getCss() {
return css;
}
public void setCss(String css) {
this.css = css;
}
public int getShowNum() {
return showNum;
}
public void setShowNum(int showNum) {
this.showNum = showNum;
}
public String getStyle() {
return style;
}
public void setStyle(String style) {
this.style = style;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>
JSTL 2.0 core library
</description>
<tlib-version>1.1</tlib-version>
<short-name>page</short-name>
<uri>http://my.cbj.org/taglibs/page</uri>
<tag>
<description>分页标签</description>
<name>page</name>
<tag-class>com.spring.web.tag.PageTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<description>总记录数</description>
<name>total</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<attribute>
<description>页大小</description>
<name>pageSize</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<attribute>
<description>样式Class</description>
<name>css</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<type>string</type>
</attribute>
<attribute>
<description>样式Style</description>
<name>style</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<type>string</type>
</attribute>
<attribute>
<description>显示分页链接数</description>
<name>showNum</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
</tag>
</taglib>
分享到:
相关推荐
自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签...
4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...
自定义页面分页标签是指开发者根据项目需求,创建个性化的分页组件,以实现更加灵活、符合界面设计风格的分页功能。下面将详细探讨如何实现自定义页面分页标签及其相关的知识点。 1. **基础概念**: - 分页:将...
本资源提供了一个非常好用的JSP分页标签,它简化了在JSP页面上实现分页的过程,无需编写过多的Java代码,只需在JSP页面上插入特定的标签即可。 1. **JSP分页标签**:JSP分页标签是一种预定义的、可重用的组件,可以...
`pager-taglib`是Java Web开发中常用的分页标签库,它简化了在JSP页面上实现分页功能的过程。这个标签库通常与Spring MVC、Struts2等框架结合使用,提供了一种声明式的方式来展示数据分页。下面将详细解释`pager-...
本项目提供了一个基于JSP的分页标签组件,名为"PaperTag",旨在简化开发过程,提高代码可读性和可维护性。 分页标签组件的工作原理是通过自定义TLD(Tag Library Descriptor)文件,定义标签行为,并在JSP页面中...
本资源提供的就是一个自定义分页标签的例子,它可以帮助我们更便捷地在页面上实现数据的分页显示。 分页是大型Web应用中常见的功能,特别是在处理大量数据时,如电商网站的产品列表、论坛的帖子等。自定义分页标签...
Java分页标签是Java Web开发中的一个重要概念,它主要用于处理大量数据的展示,尤其是在数据库查询结果需要在网页上以多页形式呈现时。这个技术可以让用户更方便地浏览和导航大量的信息,而不会一次性加载所有数据...
本篇内容主要介绍了一个简单的分页标签的实现过程,这是一个很好的学习实践,帮助开发者理解和掌握自定义标签的编写与应用。 首先,我们要理解自定义标签的生命周期和组成部分。一个完整的自定义标签通常包含以下...
总的来说,"好用的分页标签"是一个方便JSP开发者的工具,它通过提供预设的分页标签,使得在网页中实现分页功能变得简单而直观。无论是对于新手还是经验丰富的开发者,这样的组件都能提高开发速度并增强项目的用户...
`pager-taglib`是一个专为JSP页面设计的分页标签库,它简化了在JSP中实现分页的过程。下面将详细介绍`pager-taglib`的安装、使用方法以及其核心知识点。 ### 1. `pager-taglib`简介 `pager-taglib`是一个开源的JSP...
Java自定义分页标签是Java Web开发中一种高效、可复用的方法,它允许开发者创建自己的标签库,用于处理分页逻辑,提高代码的可读性和可维护性。本篇文章将详细探讨如何在Java中实现一个自定义分页标签。 首先,理解...
本教程将详细讲解如何使用JSP(JavaServer Pages)技术来实现一个通用的分页标签,以便在各种项目中复用。 首先,JSP是Java平台上的动态网页技术,它允许开发人员在HTML或者XML文档中嵌入Java代码。在分页场景下,...
**Source Insight 分页标签插件:sihook 使用详解** Source Insight是一款广受欢迎的源代码查看和编辑工具,尤其在程序员和软件开发人员中备受青睐。它提供了强大的代码导航、搜索和分析功能。为了进一步增强其功能...
**JPager 分页标签库详解** 在Web开发中,数据分页是一项常见且重要的功能,尤其是在处理大量数据时,为了提高用户体验和加载速度,我们通常会将数据分页展示。`jpager` 是一个专为 JSP 页面设计的分页标签库,它...
JSP自定义分页标签,mysql数据库,通过导入jar包,使用标签的方式实现分页的功能。
本篇文章将详细讲解如何在Java Web应用中使用分页标签。我们将主要围绕以下两个核心概念进行讨论:源码理解和工具的使用。 首先,我们需要理解分页的基本原理。在Web应用中,当数据量过大时,一次性加载所有数据...
Java 分页标签是一种自定义标签库,用于在Java Web应用程序中实现页面的分页功能。在Web开发中,当数据量庞大时,一次性加载所有数据不仅会影响页面加载速度,也会消耗大量服务器资源。分页技术则能有效地解决这个...