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"
	    	/>



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java自定义标签是指在JSP页面自定义标签,以便在JSP页面使用自己开发的标签,便于模块化和重用。下面我们通过一个实例来了解Java自定义标签的用法。 假设我们需要在JSP页面显示一个表格,表格的数据是从后台数据库中读取的。为了避免在JSP页面中写大量的Java代码,我们可以使用Java自定义标签来实现。 首先,我们需要在项目中创建一个Java类,用于实现自定义标签的功能。该类需要继承TagSupport类,并且需要实现doStartTag()方法和doEndTag()方法。doStartTag()方法用于处理开始标签,doEndTag()方法用于处理结束标签。 下面是一个简单的实例,该实例实现了一个自定义标签,用于在JSP页面显示一个表格: ``` public class TableTag extends TagSupport { private List<Object[]> data; // 表格数据 public void setData(List<Object[]> data) { this.data = data; } public int doStartTag() throws JspException { try { JspWriter out = pageContext.getOut(); out.print("<table>"); out.print("<tr><th>姓名</th><th>年龄</th></tr>"); for(Object[] row : data) { out.print("<tr>"); out.print("<td>" + row[0] + "</td>"); out.print("<td>" + row[1] + "</td>"); out.print("</tr>"); } out.print("</table>"); } catch (IOException e) { throw new JspException(e.getMessage()); } return SKIP_BODY; } public int doEndTag() throws JspException { return EVAL_PAGE; } } ``` 在上面的代码中,我们定义了一个TableTag类,该类继承自TagSupport类。我们还定义了一个data属性,用于存储表格数据。在doStartTag()方法中,我们使用JspWriter输出表格的HTML代码,并且将数据填充到表格中。在doEndTag()方法中,我们返回EVAL_PAGE,表示继续执行JSP页面的剩余部分。 接下来,我们需要在JSP页面使用自定义标签。为了使用标签,我们需要在JSP页面中引入该自定义标签: ``` <%@ taglib prefix="mytag" uri="/WEB-INF/taglib.tld" %> ``` 在上面的代码中,我们定义了一个mytag前缀,并且指定了自定义标签的URI。URI是一个唯一的标识符,用于识别自定义标签库。 下面是一个使用自定义标签JSP页面: ``` <mytag:table data="${data}" /> ``` 在上面的代码中,我们使用mytag前缀引入自定义标签,并且使用data属性传递数据。在后台Java代码中,我们需要将数据存储到request或session中,以便在JSP页面使用。 以上就是Java自定义标签的实例分析,通过该实例,我们可以了解到Java自定义标签的用法以及如何在JSP页面使用自定义标签

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值