jsp_自定义标签_显示分页标签

效果如下:

 

1实现自定义标签接口,实现自定义标签的业务逻辑

pageTag.java

package com.asarja.astl;

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;

/**
 * @author asarja
 *
 * 
 */
public class PageTag extends TagSupport{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 记录显示页码的数量
	 */
	private Integer num;
	/**
	 * 当前页码
	 */
	private Integer pageNo;
	
	/**
	 * 一次显示页码的数量
	 */
	private Integer pageCount;
	
	/**
	 * 请求地址
	 */
	private String url;
	/* (non-Javadoc)
	 * @see javax.servlet.jsp.tagext.TagSupport#doEndTag()
	 * 自定义标签的结束位置会调用该方法
	 */
	@Override
	public int doEndTag() throws JspException {
		HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
		//通过request将num pageCount pageNum存储
		JspWriter out = pageContext.getOut();
		//在页面上输出num个页码,并且区分出当前页
		try {
			printPage(request, out);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return Tag.EVAL_PAGE;
	}
	//1 2 3 4 5
	private void printPage(HttpServletRequest request,JspWriter out) throws Exception{
		// TODO Auto-generated method stub
		//对第一页及上一页链接进行处理
		if(pageNo == 1){
			out.write("第一页 ");
			out.write("上一页 ");
		}else{
			out.write("<a href="+url+"?pageNo=1>第一页</a> ");
			out.write("<a href="+url+"?pageNo="+(pageNo-1)+">上一页</a> ");	
		}
		if(pageNo > (num-pageCount)){
			for(Integer j = (num-pageCount+1);j <= num;j++){
				if(pageNo.equals(j)){
					out.write(j<10?"0"+j.toString()+" ":j.toString()+" ");
				}else{
					out.write("<a href="+url+"?pageNo="+j+">"+(j<10?"0"+j.toString()+" ":j.toString()+" ")+"</a> ");
				}
			}
		}else{			
			for (Integer i = pageNo; i < (pageNo+pageCount); i++) {
				if(pageNo.equals(i)){
					out.write(i<10?"0"+i.toString()+" ":i.toString()+" ");
				}else{				
					out.write("<a href="+url+"?pageNo="+i+">"+(i<10?"0"+i.toString()+" ":i.toString()+" ")+"</a> ");
				}
			}
		}
		//下一页及最后一页的链接处理
		if(pageNo.equals(num)){
			out.write("下一页 ");
			out.write("最后一页 ");
		}else{
			out.write("<a href="+url+"?pageNo="+(pageNo+1)+">下一页</a> ");
			out.write("<a href="+url+"?pageNo="+num+">最后一页</a> ");	
		}
	}
	
	/* (non-Javadoc)
	 * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
	 * 自定义标签的起始位置会调用该方法
	 */
	@Override
	public int doStartTag() throws JspException {
		if(num == null || num.equals(0)){
			num = 25;
		}
		if(pageNo == null || pageNo<1){
			pageNo = 1;
			
		}
		if(pageNo>num){
			pageNo = num;
		}
		if(pageCount == null || pageCount.equals(0)){
			pageCount = 5;
		}
		return Tag.EVAL_BODY_INCLUDE;
	}

	@Override
	public void release() {
		// TODO Auto-generated method stub
		super.release();
	}

	public Integer getNum() {
		return num;
	}

	public void setNum(Integer num) {
		this.num = num;
	}

	public Integer getPageNo() {
		return pageNo;
	}

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

	public Integer getPageCount() {
		return pageCount;
	}

	public void setPageCount(Integer pageCount) {
		this.pageCount = pageCount;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	
}


 

1配置tld文件

out.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
	  <description>ASTL 1.0 a Library</description>
	  <display-name>ASTL out</display-name>
	  <tlib-version>1.0</tlib-version>
	  <short-name>a</short-name>
	  <uri>http://www.asarja.com/astl/out</uri>
	  <tag>
	  	<name>getPath</name>
	  	<tag-class>com.asarja.astl.GetPathTag</tag-class>
	  	<body-content>empty</body-content>
	  </tag>
	  <tag>
	  	<name>getPage</name>
	  	<tag-class>com.asarja.astl.PageTag</tag-class>
	  	<body-content>JSP</body-content>
	  	<attribute>
	  		<name>num</name>
	  		<required>true</required>
	  		<rtexprvalue>true</rtexprvalue>
	  	</attribute>
	  	<attribute>
	  		<name>pageNo</name>
	  		<required>true</required>
	  		<rtexprvalue>true</rtexprvalue>
	  	</attribute>
	  	<attribute>
	  		<name>pageCount</name>
	  		<required>true</required>
	  		<rtexprvalue>true</rtexprvalue>
	  	</attribute>
	  	<attribute>
	  		<name>url</name>
	  		<required>true</required>
	  		<rtexprvalue>true</rtexprvalue>
	  	</attribute>
	  </tag>
</taglib>


3 在web.xml文件中配置taglib

  <jsp-config>
    <taglib>
      <taglib-uri>http://www.asarja.com/astl/out</taglib-uri>
      <taglib-location>/WEB-INF/tlds/out.tld</taglib-location>
    </taglib>
  </jsp-config>


4 在页面中测试

<out:getPage 
	    	pageNo="${param.pageNo }" 
	    	num="${requestScope.num }" 
	    	pageCount="${requestScope.pageCount }"
	    	url="pageServlet"
	    	/>



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值