`
907182878
  • 浏览: 7743 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jsp自定义分页标签

    博客分类:
  • jsp
阅读更多
直接就java代码吧
package net.eicp.roomally.web.tag;
import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class PagingTag extends BodyTagSupport {
	private static final long serialVersionUID = 3803084919005718453L;
	// 用户请求的method
	private String method;
	private boolean isBorder;
	private String parameters;
	// 点击时提交处理的url(必须)
	private String action;

	// 数据库的数据总条数(必须)
	private long count;

	public String getParameters() {
		return parameters;
	}

	public void setParameters(String parameters) {
		this.parameters = parameters;
	}

	// 当前的条数
	private long index;

	// 每页的条数
	private int pageCount;

	private long next() {
		long previousIndex = count - count % pageCount;
		if (index >= previousIndex) {
			return previousIndex;
		} else if ((index + pageCount) == count) {
			return index;
		}
		return index + pageCount;
	}

	private long previous() {
		if (index <= 0) {
			return 0;
		}
		return index - pageCount;
	}

	/*
	 * 收集参数
	 */
	private String parameter() {
		String para = "";
		if (!isNull(method)) {
			para += "&method=" + method;
		}
		if (!isNull(parameters)) {
			para += "&" + parameters;
		}
		return para;
	}

	/*
	 * 判断是否为空
	 */
	private boolean isNull(String name) {
		return "".equals(name == null ? "" : name);
	}

	/*
	 * 得到页数共有多少页
	 */
	private long getSumPage() {
		long page = count / pageCount;
		if ((count % pageCount) != 0) {
			page += 1;
		}
		return page;
	}

	/*
	 * 得到当前的页数
	 */
	private long getCurrentPage() {
		long page = index / pageCount;
		page++;
		if ((index % pageCount) != 0) {
			page++;
		}
		return page;
	}

	/*
	 * 得到最后一页
	 */
	private long atLength() {
		if ((count % pageCount) == 0) {
			return count - pageCount;
		}
		return (count - count % pageCount);
	}

	private String getContext() {
		StringBuffer page = new StringBuffer(
				"<table cellpadding=0 cellspacing=0");
		if (isBorder) {
			page.append(" style='border-style: dotted;'");
		}
		page.append(">");
		page.append("<tr>");
		page.append("<td>");
		page.append("共有<font color=green size=4>" + count
				+ "</font>条记录,当前第<font color=green size=4>" + getCurrentPage()
				+ "</font>页,共<font color=green size=4>" + getSumPage()
				+ "</font>页&nbsp;&nbsp;");
		page.append("</td>");
		page.append("<td align=center>");
		page.append("<input style='background-color: #dcf1fc;border-style:ridge;' type=button value=首页 onclick=\"location='"
				+ action);
		page.append("?index=0" + parameter() + "'\">");
		page.append("</td>");
		page.append("<td align=center>");
		page.append("<input style='background-color: #dcf1fc;border-style:ridge;' type=button value=上一页 onclick=\"location='"
				+ action);
		page.append("?index=" + previous() + parameter() + "'\">");
		page.append("</td>");
		page.append("<td align=center>");
		page.append("<input style='background-color: #dcf1fc;border-style:ridge;' type=button value=下一页 onclick=\"location='"
				+ action);
		page.append("?index=" + next() + parameter() + "'\">");
		page.append("</td>");
		page.append("<td align=center>");
		page.append("<input style='background-color: #dcf1fc;border-style:ridge;' type=button value=尾页 onclick=\"location='"
				+ action);
		page.append("?index=" + atLength() + parameter() + "'\">");
		page.append("</td>");
		page.append("</tr>");
		page.append("</table>");
		return page.toString();
	}

	public int doStartTag() throws JspException {
		JspWriter out = this.pageContext.getOut();
		String page = getContext();
		try {
			out.write(page);
		} catch (IOException e) {
		}
		return SKIP_BODY;
	}

	public int doEndTag() throws JspException {
		if (this.bodyContent != null) {
			try {
				this.bodyContent
						.writeOut(this.bodyContent.getEnclosingWriter());
			} catch (IOException e) {
			}
		}
		return EVAL_PAGE;
	}

	public int doAfterBody() throws JspException {
		return SKIP_BODY;
	}

	public void doInitBody() throws JspException {
		super.doInitBody();
	}

	public void setBodyContent(BodyContent bodyContent) {
		this.bodyContent = bodyContent;
	}

	public String getMethod() {
		return method;
	}

	public void setMethod(String method) {
		this.method = method;
	}

	public String getAction() {
		return action;
	}

	public void setAction(String action) {
		this.action = action;
	}

	public long getCount() {
		return count;
	}

	public void setCount(long count) {
		this.count = count;
	}

	public long getIndex() {
		return index;
	}

	public void setIndex(long index) {
		this.index = index;
	}

	public int getPageCount() {
		return pageCount;
	}

	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}

	public boolean isBorder() {
		return isBorder;
	}

	public void setBorder(boolean border) {
		this.isBorder = border;
	}
}

然后在WEB-INF下创建一个.tld文件,下面是tld文件的内容,内容里的http://roomally.eicp.net/tag/page就是在jsp页面要通过指令taglib引用的
引用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>
<tlib-version>2.0</tlib-version>
<jsp-version>1.0</jsp-version>
<short-name>page</short-name>
<uri>http://roomally.eicp.net/tag/page</uri>
<tag>
<name>paging</name>
<tag-class>net.eicp.roomally.web.tag.PagingTag</tag-class>
<attribute>
<name>action</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>method</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>count</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>index</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pageCount</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>border</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>parameters</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

jsp页面要通过taglib引入:
<%@ taglib prefix="pageing" uri="http://roomally.eicp.net/tag/page"%>
然后把下面这段代码放在你想放的位置:
<pageing:paging pageCount="15" index="0" count="20" parameters="orderBy=desc&search=123" action=""></pageing:paging>

参数pageCount : 每页要分多少个
index : 当前的位置
count : 总条数
parameters : 可以携带一些参数
action : 要请求的action,sevlet或jsp

在请求到的 action 里,拿着request里的index就可以分页了,需要继续把index进行传递。

对jsp自定义分页有一点了解的人会比较容易看懂。
分享到:
评论

相关推荐

    JSP自定义分页标签

    JSP自定义分页标签,mysql数据库,通过导入jar包,使用标签的方式实现分页的功能。

    JSP自定义分页标签 extends TagSupport

    JSP自定义分页标签 extends TagSupport 多种分页风格无需额外资源,使用简单易懂:WebRoot/WEB-INF/tms-tags.tld 文件路径

    JSP自定义标签分页

    JSP自定义标签分页+Struts1.x标签,包含标签分页类、标签tld文件、web.xml配置和调用例子,非常地简单。 只要在Action传request.setAttribute("listUser", listUser);到JSP即可实现自动分页,输出分页样式可以自己去...

    java自定义分页标签

    Java自定义分页标签是Java Web开发中一种高效、可复用的方法,它允许开发者创建自己的标签库,用于处理分页逻辑,提高代码的可读性和可维护性。本篇文章将详细探讨如何在Java中实现一个自定义分页标签。 首先,理解...

    jsp 对List的自定义分页标签

    jsp 对List的自定义分页标签 很好用的

    JSP自定义分页标签TAG全过程

    JSP自定义分页标签是一种在Java Server Pages中实现分页功能的自定义标签,它通过TLD文件(标签库描述文件)来定义和描述标签的属性和行为,实现分页显示的功能。以下是关于JSP自定义分页标签全过程的一些详细知识点...

    自定义分页标签 Java

    总结来说,自定义分页标签Java涉及到的知识点包括JSP标签库的创建、Java标签处理类的编写、数据库交互与SQL操作、请求参数处理、数据模型的设计以及优化策略。通过熟练掌握这些知识点,开发者可以构建出高效、灵活的...

    Struts2自定义分页标签

    本资源详细介绍了如何在Struts2中自定义分页标签,使得开发过程更加便捷。 在Struts2中,分页通常涉及到以下几个关键步骤: 1. **创建Action类**:首先,你需要创建一个Action类,该类将处理用户的请求,包括获取...

    一个功能强大的自定义分页标签

    "一个功能强大的自定义分页标签"实例提供了一种高效且灵活的方式来处理分页问题,特别是对于那些希望通过自定义逻辑来增强其应用程序分页功能的开发者而言。 自定义标签是JSP(JavaServer Pages)技术的一部分,它...

    非常好用的自定义分页标签

    在IT行业中,自定义分页标签是Web应用开发中常用的一种技术,特别是在Java Web开发领域。自定义标签(Custom Tags)允许开发者创建自己的HTML标签,这些标签可以封装复杂的逻辑,提高代码的可读性和可维护性。在这个...

    自定义分页标签源代码

    本自定义分页标签源代码提供了一种解决方案,它独立于数据库操作,仅处理分页逻辑,允许开发者专注于数据获取和展示。接下来,我们将详细讨论相关知识点。 1. **自定义标签**: 自定义标签是JSP中的一种特性,允许...

    基于struts2 自定义标签 分页

    在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...

Global site tag (gtag.js) - Google Analytics