首页 > 代码库 > 自定义标签

自定义标签

在实际的开发中,如为了简化JSP中出现大量的JSP脚本,那么我们需要使用标准标签库和EL表达式,但是和新标签库中提供的标签是有限的,不可能完全满足开发的需要。如:分页。因此需要学习如何自定义自己的标签库。

如果要实现自定义标签,那么需要如下几步:

  1. 编写标签处理类

需要继承或者实现相关的类或者接口

  1. 编写标签描述文件

该文件是一个XML文件,而且必须放在网站的WEB-INF目录中

  1. 在JSP中引入标签且使用

使用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>