简单的自定义标签--分页标签

以前没有写blog的习惯,总是看别人的。今天开始边学习,边总结吧。新人还望指点。废多看题0.0

进入主题:自定义标签的简单使用,成果是这两天做的分页标签。

我的步骤:

1、首先是建一个分页Page的实体类

import java.util.List;

import com.google.common.collect.Lists;

public class Page<M> {

	// 当前页号
	protected Integer pageNo = 1;
	// 每页显示的记录条数
	protected Integer pageSize = 10;
	// 总记录条数
	protected Long totalCount = (long) 0;
	// 总页数
	protected Integer totalPage = 0;
	// 结果集合
	protected List<M> result = Lists.newArrayList();

	public Integer getPageNo() {
		return pageNo;
	}

	public void setPageNo(Integer pageNo) {
		this.pageNo = pageNo;
		if (pageNo < 1) {
			this.pageNo = 1;
		}
	}

	public Integer getPageSize() {
		return pageSize;
	}

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
		if (pageSize < 1) {
			this.pageSize = 1;
		}
	}

	public Long getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(Long totalCount) {
		this.totalCount = totalCount;
	}

	public Integer getTotalPage() {
		Integer totalPage = (int) (totalCount / pageSize);
		if (totalCount % pageSize > 0)
			totalPage++;
		return totalPage;
	}

	public void setTotalPage(Integer totalPage) {
		this.totalPage = totalPage;
	}
<span style="white-space:pre">	</span>
	public List<M> getResult() {
		return result;
	}

	public void setResult(List<M> result) {
		this.result = result;
	}

	/**
	 * 获取当前页第一条记录在总结果集中的位置,序号从1开始,总结果集中位置编号从0开始
	 * 
	 * @return
	 */
	public Integer getFirst() {
		return ((pageNo - 1) * pageSize);
	}

}
2 创建分页标签PageTag类,继承TagSupp。(注意:根据样式的不同,分页的class可替换)

import java.io.IOException;

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

public class PageTag<M> extends TagSupport {

	private static final long serialVersionUID = -7573666909332294575L;
	// 每页显示数量
	private int pageSize = 10;
	// 当前页号
	private int pageNo = 1;
	// 总记录数
	protected Long totalCount = (long) 0;
	// 总页数
	protected int totalPage = 0;

	// 地址
	private String url;

	// 查询参数
	private String param;

	@Override
	public int doEndTag() throws JspException {
		return super.doEndTag();
	}

	@SuppressWarnings("unchecked")
	@Override
	public int doStartTag() throws JspException {
		// 获取请求中的所有参数
		HttpServletRequest request = (HttpServletRequest) pageContext
				.getRequest();
		Page<M> page = (Page<M>) request.getAttribute("page");
		if (page != null) {
			pageNo = page.getPageNo();
			pageSize = page.getPageSize();
			totalCount = page.getTotalCount();
			totalPage = page.getTotalPage();
		}
		StringBuilder sb = new StringBuilder();
		sb.append("<div class='pagin'>");
		if (totalCount == 0) {
			sb.append("<strong>没有可显示的项目</strong>\r\n");
		} else {
			sb.append("<div class='message'>共<i class='blue'>" + totalCount
					+ "</i>条记录,");
			sb.append("共<i class='blue'>" + totalPage + "</i>页,当前显示第 ");
			sb.append("<i class='blue'>" + pageNo + " </i>页  ");
			sb.append("每页显示 <select style='width: 40px;border: 1px solid #3399d5;opacity:1;' οnchange=\"changePageSize(this,'"
					+ url + "'," + param + ")\">");

			for (int i = 10; i <= 50; i += 10) {
				if (pageSize == i) {
					sb.append("<option value='" + i + "' selected='selected'>"
							+ i + "</option>");
				} else {
					sb.append("<option value='" + i + "'>" + i + "</option>");
				}
			}
			sb.append("</select>");
			sb.append("</div>");
			sb.append("<ul class='paginList'>");
			sb.append("<li class='paginItem'><a οnclick=\"findByPage(0,"
					+ pageSize + ",'" + url + "'," + param + ")\">首页</a></li>");
			// 开始的页号
			int first = 1;
			// 最后的页号
			int end = 10;
			// 如果总页数小于10,结束页即为总页数
			if (totalPage < end) {
				end = totalPage;
			}
			if (pageNo <= 5) {
				first = 1;
			} else {
				first = pageNo - 4;
				end = pageNo + 5;
				if (end > totalPage) {
					end = totalPage;
					first = end - 9;
				}
			}
			for (int i = first; i <= end; i++) {
				if (i == pageNo) {
					sb.append("<li class='paginItem current'><a οnclick=\"findByPage("
							+ i
							+ ","
							+ pageSize
							+ ",'"
							+ url
							+ "',"
							+ param
							+ ")\">" + i + "</a></li>");
				} else {
					sb.append("<li class='paginItem'><a οnclick=\"findByPage("
							+ i + "," + pageSize + ",'" + url + "'," + param
							+ ")\">" + i + "</a></li>");
				}
			}
			sb.append("<li class='paginItem'><a οnclick=\"findByPage("
					+ totalPage + "," + pageSize + ",'" + url + "'," + param
					+ ")\">尾页</a></li>");
			sb.append("</ul>");
		}
		sb.append("</div>");
		try {
			pageContext.getOut().println(sb.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return SKIP_BODY;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	public Long getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(Long totalCount) {
		this.totalCount = totalCount;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public String getUrl() {
		return url;
	}

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

	public String getParam() {
		return param;
	}

	public void setParam(String param) {
		this.param = param;
	}

}

3、编写pageTag.tld配置文件,放在WEB-INF下,与web.xml平行

<?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>k</short-name>
  <uri>http://kframe.com/tags/page</uri>
  <tag>
  	<name>pager</name>
  	<tag-class>com.zbtg.util.PageTag</tag-class>
  	<body-content>empty</body-content>
  	<attribute>
  		<name>pageNo</name>
  		<required>true</required>
  		<rtexprvalue>true</rtexprvalue>
  		<type>int</type>
  	</attribute>
  	<attribute>
  		<name>pageSize</name>
  		<required>false</required>
  		<rtexprvalue>true</rtexprvalue>
  		<type>int</type>
  	</attribute>
  	<attribute>
  		<name>url</name>
  		<required>true</required>
  		<rtexprvalue>true</rtexprvalue>
  		<type>String</type>
  	</attribute>
  	  	<attribute>
  		<name>param</name>
  		<required>false</required>
  		<rtexprvalue>true</rtexprvalue>
  		<type>String</type>
  	</attribute>
  </tag>
</taglib>
附说明:
创建标签库描述文件(Tag Library Descriptor)

1、标签库描述文件,简称TLD,采用XML文件格式,定义了用户的标签库。TLD文件中的元素可以分成3类:

A.标签库元素 
B.标签元素 
C.标签属性元素

2、标签库元素用来设定标签库的相关信息,它的常用属性有:

A.shortname:指定Tag Library默认的前缀名(prefix);

B.uri:设定Tag Library的惟一访问表示符。

3、标签元素用来定义一个标签,它的常见属性有:

A.name:设定Tag的名字;

B.tagclass:设定Tag的处理类;

C.bodycontent:设定标签的主体(body)内容。

1)empty:表示标签中没有body; 
2)JSP:表示标签的body中可以加入JSP程序代码; 
3)tagdependent:表示标签中的内容由标签自己去处理。

4、标签属性元素用来定义标签的属性,它的常见属性有:

A.name:属性名称;
B.required:属性是否必需的,默认为false; 
C.rtexprvalue:属性值是否可以为request-time表达式,也就是类似于< %=…% >的表达式。


4、最后就是向web.xml中配置pageTag.tld

 <jsp-config>
   	<taglib>
   		<taglib-uri>http://kframe.com/tags/page</taglib-uri>
   		<taglib-location>/WEB-INF/pageTag.tld</taglib-location>
   	</taglib>
   </jsp-config>

5、在web应用中使用标签

<% @ taglib prefix = “k” uri = "http://kframe.com/tags/page" %>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值