`
907182878
  • 浏览: 7402 次
  • 性别: 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自定义分页有一点了解的人会比较容易看懂。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics