jstl自定义标签

<span style="font-size:14px;">用过jstl和el表达式的人都觉得这个用起来很方便,今天我要说的不是怎么用它,而是怎么自定义一个jstl标签!写一个jstl标签其实很简单,它的底层都是通过java写一个方法实现相应的功能,然后将其封装成一个jar包,需要时调用即可。</span>

我以输出格式化后的时间作为自定义jstl标签的案例来讲解具体的步骤,首先要在WEB-INF目录下建一个xxx.tld文件,我的是yctaglibs.tld文件。按照官方给出的c.tld文件写。先上代码,然后再进行讲解。

<span style="font-size:14px;"><?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>yc standard tag lib</description>
  <display-name>yc tag lib</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>yc</short-name>
  <uri>http://www.hyycinfo.com/taglib/yc</uri>
  <tag>
	 <name>time</name>
	 <tag-class>com.yc.web.taglibs.TimeTag</tag-class>
	 <body-content>empty</body-content>
	 <attribute>
	 	<!-- 属性名 -->
        	<name>format</name>
        	<!-- 是否是必填字段 -->
        	<required>false</required>
        	<!-- 是否支持el表达式 -->
        	<rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
</taglib></span>
上述代码中 第一行声明以及taglib中的参数都必须按照 官方给出的c.tld文件写,最好是复制粘提,避免出错。

description 描述 

diaplay-name 展示名字  

tlib-version  版本号

short-name 简名

uri 标签文件的访问路径  (重要)在jsp页面中访问时需要这个地址

<tag></tag>之间

tag-class:自定义的标签类的全称

body-content:自定义标签是否有标签体内容  (empty:没有  JSP:有)

attribute:标签的属性


接着写自定义标签的类TimeTage.java

<span style="font-size:14px;">package com.yc.web.taglibs;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

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

public class TimeTag extends TagSupport {
	private String format="";
	@Override
	public int doStartTag() throws JspException {
		Date d=new Date();		
		//在页面输出 (用流)
		//PrintWriter out=null;
		JspWriter out=null;
		try {
			//得到  响应对象 取出流
			//out = super.pageContext.getResponse().getWriter();
			//jsp标准流,按照http协议输出
			out=super.pageContext.getOut();
			if(format!=null && !"".equals(format)){
				SimpleDateFormat sdf=new SimpleDateFormat(format);
				out.write(sdf.format(d));
				out.flush();
			}else{
				out.write(d+"");
				out.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}		
		//out.close();		
		return super.SKIP_BODY;
	}	
	public void setFormat(String format) {
		this.format = format;
	}	
}
</span>
在这个类中要输出就必须获取流,获取流有两种方式:第一种就是通过响应对象获得流,第二种是jsp标准流。前者在页面输出时,html标签无效,如换行不会有;而后者则不会出现这种情况,因为后是遵循http协议输出。我个人的理解就是,用前者输出时,先输出,然后才会读取其他html标签元素。这个在jsp编译成xxx.java文件中可以很容易看出,而后者在编译后的java文件中不会出现这种情况。

最后一步就是index.jsp页面了,在声明语句之后,引用自定义标签的类

<span style="font-size:14px;"><%@ taglib prefix="yc" uri="http://www.hyycinfo.com/taglib/yc"%>
</span>
第一个引用的是自定义的标签,uri就是在yctaglibs.tld定义的地址

<span style="font-size:14px;"><span style="white-space:pre">	</span><!-- 输出当前时间 -->
	<yc:time />
	
	<hr />
	<yc:time format="yyyy年MM月dd日" />
	<hr /></span>
写到这里,自定标签已经写完了,具体结果如下:



相信看到这里, 大家对自定义标签有了一定的了解,那么赶紧行动起来,自己写一个自定义标签!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值