在实际的开发中,如为了简化JSP中出现大量的JSP脚本,那么我们需要使用标准标签库和EL表达式,但是和新标签库中提供的标签是有限的,不可能完全满足开发的需要。如:分页。因此需要学习如何自定义自己的标签库。
如果要实现自定义标签,那么需要如下几步:
需要继承或者实现相关的类或者接口
该文件是一个XML文件,而且必须放在网站的WEB-INF目录中
使用taglib指令引入标签库,随后使用。
详细了解下一下几个类和接口:
---| JspTag接口
该接口是一个典型的标记接口。主要标记实现该接口的类可以处理标签。Seralizable
----| Tag接口
该接口主要描述的是标签处理类的共性,但是实现该接口的类不能处理标签体,该接口中定义了标签处理类和JSP页面之间的通信协议。而且提供生命周期方法如:在标签开始和接结束的时候自动执行的方法。
------| TagSupport类
主要负责处理标签的属性。
-------| BodyTagSupport类
该类主要的是处理标签的标签体。
实现带标签体的自定义标签
1.标签处理类
1 public class ShowDateByBody extends BodyTagSupport { 2 // 为了便于获取属性,那么直接在处理类中定义和属性同名的属性变量即可且提供get和set方法 3 private String pattern; 4 public String getPattern() { 5 return pattern; 6 } 7 public void setPattern(String pattern) { 8 this.pattern = pattern; 9 } 10 11 // 标签开始的时候自动执行 12 public int doStartTag() throws JspException { 13 // 创建日期对象 14 Date date = new Date(); 15 // 创建格式化对象 16 SimpleDateFormat format = new SimpleDateFormat(getPattern()); 17 // 格式化 18 String str = format.format(date); 19 // 获取JSP上下文对象 20 PageContext pageContext = this.pageContext; 21 // 获取JSP的OUT输出流 22 JspWriter out = pageContext.getOut(); 23 // 获取标签提的内容 24 BodyContent body = this.getBodyContent(); 25 String tag_body = body.getString(); 26 str = "<font color=‘red‘>"+tag_body+"</font>"+str; 27 // 输出 28 try { 29 out.write(str); 30 } catch (IOException e) { 31 e.printStackTrace(); 32 } 33 return super.doStartTag(); 34 } 35 }
2. 描述文件
1 <tag> 2 <name>showdate2</name> 3 <tag-class>cn.itcast.custom.ShowDateByBody</tag-class> 4 <body-content>JSP</body-content> 5 <attribute> 6 <name>pattern</name> 7 <required>true</required> 8 <rtexprvalue>true</rtexprvalue> 9 </attribute> 10 </tag>
3. 引入和使用
<date:showdate2 pattern="yyyy-MM-dd">系统时间:</date:showdate2>
原文:http://www.cnblogs.com/friends-wf/p/3736655.html