自定义JSP分页标签

 

1、在WEB-INF目录下面添加adtec.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>
<jsp-version>2.0</jsp-version>
<short-name>adtec</short-name>
<uri>http://www.adtec.com.cn</uri>
	<tag>
		<!-- 指定标签名 -->
		<name>localFileName</name>
		<!-- 指定标签类文件的全路径 -->
		<tag-class>adtec.tag.LocalFileName</tag-class>
		<!--如果不需要标签体则设置empty,反之设定jsp -->
		<body-content>jsp</body-content>
		<!--  设定属性(如果有的话) -->
		<attribute>
			<!-- 指定标签名 -->
		   	<name>isShow</name>
			<!--  是否是必须,如果非必须没设置则为空 -->
			<required>false</required>
		</attribute>
	</tag>
	
	<tag>
		<!-- 指定标签名 -->
		<name>page</name>
		<!-- 指定标签类文件的全路径 -->
		<tag-class>adtec.tag.PageTag</tag-class>
		<!--如果不需要标签体则设置empty,反之设定jsp -->
		<body-content>jsp</body-content>
		<!--  设定属性(如果有的话) -->
		<attribute>
			<!-- 指定标签名 -->
		   	<name>url</name>
			<!--  是否是必须,如果非必须没设置则为空 -->
			<required>true</required>
		</attribute>
		<attribute>
			<!-- 指定标签名 -->
		   	<name>curpage</name>
			<!--  是否是必须,如果非必须没设置则为空 -->
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<!-- 指定标签名 -->
		   	<name>pagesize</name>
			<!--  是否是必须,如果非必须没设置则为空 -->
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<!-- 指定标签名 -->
		   	<name>totalLines</name>
			<!--  是否是必须,如果非必须没设置则为空 -->
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

 

2、在web.xml文件中添加如下代码

<!-- 使用自定义标签 -->
<jsp-config>
	<taglib>
		<taglib-uri>http://www.adtec.com.cn</taglib-uri>
		<!-- tld文件所在的位置-->
		<taglib-location>/WEB-INF/adtec.tld</taglib-location>
	</taglib>
</jsp-config>

 

3、添加java文件

package adtec.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * 显示当前JSP页面
 * @author huangbiao
 */
public class LocalFileName extends TagSupport {

	/**
	 * 是否显示内容
	 * true 显示
	 * false 不显示
	 */
	private String isShow;
	
	public String getIsShow() {
		return isShow;
	}

	public void setIsShow(String isShow) {
		this.isShow = isShow;
	}

	@Override
	public int doStartTag() throws JspException {
		
		if("false".equals(isShow)){
			return Tag.SKIP_BODY;
		}
		
		JspWriter jspWriter = this.pageContext.getOut();
		HttpServletRequest request = (HttpServletRequest)this.pageContext.getRequest();
		String   uri= request.getRequestURI();   
		uri=uri.substring(uri.lastIndexOf("/")+1);
		//<meta name="currentPageName" contect="">
		try {
			jspWriter.println("<meta name=\"currentPageName\" contect=\""+uri+"\">");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return Tag.EVAL_BODY_INCLUDE;
	}
}

 

4、在JSP页面中添加使用的标签

<%@taglib uri="http://www.adtec.com.cn" prefix="adtec"%>
<adtec:localFileName isShow="false"></adtec:localFileName>

 

使用上面这种标签是为了查看当前jsp页面的名称,方便开发调试

 

5、添加JAVA测试页面

package adtec.tag;

import java.io.IOException;
import java.text.MessageFormat;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * 分页标签
 * @author huangbiao
 */
public class PageTag extends TagSupport {

	private String url; // 链接地址
	private int curpage;// 当前页
	private int pagesize; // 页大小
	private int totalLines; // 总记录条数

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public int getCurpage() {
		return curpage;
	}

	public void setCurpage(int curpage) {
		this.curpage = curpage;
	}

	public int getPagesize() {
		return pagesize;
	}

	public void setPagesize(int pagesize) {
		this.pagesize = pagesize;
	}

	public int getTotalLines() {
		return totalLines;
	}

	public void setTotalLines(int totalLines) {
		this.totalLines = totalLines;
	}

	/**
	 * 计算总页数
	 * @return
	 */
	private int totalPages() {
		int result = totalLines % pagesize == 0 ? totalLines / pagesize : totalLines / pagesize + 1;
		//如果传递的totalLines为0则让其为1
		return result == 0 ? 1 : result;
	}

	@Override
	public int doStartTag() throws JspException {

		JspWriter out = this.pageContext.getOut();
		// {0}:url, {1}:curpage, {2}:pagesize, {3}:第一页 上一页 下一页 最后一页
//		String link = "<a href='{0}?curpage={1}&pagesize={2}'>{3}</a>";
//		String link = "<A href=\"#\" onclick=\"return onSelect('${pageModel.pageUp }')\"><font id=\"pageUp\">上一页</font></A>";
		String link = "<A href=\"{0}?pageNow={1}\">{2}</A>";

		if (curpage == 0){
			curpage = 1;
		}

		if (pagesize == 0){
			pagesize = 5;
		}

		int totalPages = this.totalPages();
		if (curpage > totalPages){
			curpage = totalPages;
		}

		if (curpage < 1){
			curpage = 1;
		}

		String first = MessageFormat.format(link, url, "1", "第一页");

		String previous = null;
		if (curpage <= 1) {
			previous = "上一页";
		} else {
			previous = MessageFormat.format(link, url, String.valueOf(curpage - 1), "上一页");
		}

		String next = null;
		if (curpage >= totalPages) {
			next = "下一页";
		} else {
			next = MessageFormat.format(link, url, String.valueOf(curpage + 1), "下一页");
		}

		String last = MessageFormat.format(link, url, String.valueOf(totalPages), "最后一页");

		//${pageModel.pageNow }  ${pageModel.pageCount }  ${pageModel.pageUp} ${pageModel.pageDown}

		try {
			//String html = "{0} {1} {2} {3} 当前第{4}页 共{5}页 每页显示{6}条 共有{7}条";
			//html = MessageFormat.format(html, first, previous, next, last, String.valueOf(curpage), String.valueOf(totalPages), String.valueOf(pagesize), String.valueOf(totalLines));
			//{0}第一页  {1}上一页  {2}currentPage/{3}totalPage {4}下一页 {5}最后一页
			String outStr = "<div class=\"list_btline\"><div class=\"f_size selbar_bt barspace2\" style=\"height: 24px; padding-top: 3px\">" +
					"<DIV class=\"right\" style=\"padding-right:20px;\">" +
					"{0}&nbsp;" +
					"{1}&nbsp;" +
					"{2}/{3}页&nbsp;" +
					"{4}&nbsp;" +
					"{5}&nbsp;" +
					"<input type=\"text\" style=\"width: 20px;\" name=\"pageJump\" id=\"pageJump\"><A title=\"跳转到指定一页\" href=\"#\" " +
					"onclick=\"return onJumpSelect()\">跳转</A></DIV></div></div>";
			outStr = MessageFormat.format(outStr, first,previous, String.valueOf(curpage),String.valueOf(totalPages), next, last);
			out.println(outStr);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return EVAL_BODY_INCLUDE;
	}
}

 

备注:可以先预定义一个字符串的模板,然后将变量部分作为参数传递

 

6、在JSP页面中添加使用的标签

 

<%@taglib uri="http://www.adtec.com.cn" prefix="adtec"%>
<adtec:page url="accountList.do" totalLines="${pageModel.count }" curpage="${pageModel.pageNow }" pagesize="${pageModel.pageSize }"></adtec:page>

 

 

备注:需要强调的是上面这种分页实际上是需要跟美工配合的,包括其中的CSS样式,上面这种方式只是能解决分页逻辑判断。

 

你可能感兴趣的:(jsp)