開發屬於你本身的標籤庫!

1.一、 如何進行自定義簡單標籤:

    對於自定義標籤而言,若是咱們要想使用咱們本身定義的簡單標籤咱們必須瞭解下面的相關類及接口的關係!這樣咱們就能夠開發咱們本身的標籤庫了!下面咱們來看一下吧!java

咱們只要實現SimpleTag接口的實現類SimpleTagSupport抽象類就能夠了!在此咱們先來了解一下 SimpleTag 接口中定義的方法:web

 1 public interface SimpleTag extends JspTag {
 2 
 3     public void doTag()
 4                  throws javax.servlet.jsp.JspException, java.io.IOException;
 5 
 6     public void setParent( JspTag parent );
 7 
 8     public JspTag getParent();
 9 
10     public void setJspContext( JspContext pc );
11 
12     public void setJspBody( JspFragment jspBody );
13  
14 
15 }    

如下是該接口中方法的做用:express

  • setJspContext 方法:該方法把表明 JSP 頁面的 pageContext 對象傳遞給標籤處理器對象。
  • setParent 方法:該方法把父標籤處理器對象傳遞給當前標籤處理器對象
  • getParent 方法:該方法用於得到標籤的父標籤處理器對象
  • setJspBody 方法:該方法用於把表明標籤體的 JspFragment 對象傳遞給標籤處理器對象
  • doTag 方法:該方法用於完成全部的標籤執行的業務邏輯。該方法能夠拋出 javax.servlet.jsp.SkipPageException 異常,用於通知 web 容器再也不執行 JSP 頁面中位於結束標記後面的內容。

1.二、標籤處理器類的生命週期:

開發自定義標籤,其核心就是要編寫處理器類,在咱們瞭解過SimpleTag 接口中的方法後咱們來了解一下當咱們編寫實現SimpleTag接口的標籤處理器類後,其生命週期是是怎樣的(即:方法的執行順序)?apache

咱們瞭解了標籤處理器類後,咱們下面來了解一下標籤庫描述文件less

  • 標籤庫描述(Tag Library Description)文件簡稱爲 tld 文件,其擴展名爲 .tld
  • 多個標籤的集合就造成了一個標籤庫,標籤庫中的全部標籤都必須在標籤文件中進行描述
  • tld 文件能夠放置在 web 應用程序的 WEB-INF 目錄及其子目錄中,但不能放置在 WEB-INF 目錄下的 classes 和 lib 子目錄中。其中tld文件也能夠放置在META-INF 目錄及其子目錄中

下面就是tld文件的部份內容:jsp

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!-- DTD約束引用-->  
 3 <taglib xmlns="http://java.sun.com/xml/ns/javaee"
 4         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
 6         version="2.1">
 7 <!-- tld 文件的描述信息-->
 8     <description>JSTL 1.2 core library</description>
 9     <display-name>JSTL core</display-name>
10     <tlib-version>1.2</tlib-version>
11     <short-name>c</short-name>
12     <uri>http://java.sun.com/jsp/jstl/core</uri>
13     <validator>
14         <description>
15             Provides core validation features for JSTL tags.
16         </description>
17         <validator-class>
18             org.apache.taglibs.standard.tlv.JstlCoreTLV
19         </validator-class>
20     </validator>
21 <!-- 在 tag 標籤中定義的咱們的自定義標籤-->
22     <tag>
23         <description>
24            Catches any Throwable that occurs in its body and optionally
25             exposes it.
26         </description>
27 <!-- 自定義標籤的名字-->
28         <name>catch</name>
29  <!-- 自定義標籤的處理器類全類名-->
30 <tag-class>
31 org.apache.taglibs.standard.tag.common.core.CatchTag
32 </tag-class>
33 <!-- 自定義標籤的標籤體的內容類型:在2.0版本中只有empty、scriptless、tagdependent 三種類型,但到了2.1版本後加了 JSP 類型,更加豐富了標籤體的靈活性。
34 –    empty:沒有標籤體    
35 –    scriptless:標籤體能夠包含 el 表達式和 JSP 動做元素,但不能包含 JSP 的腳本元素
36 –    tagdependent:表示標籤體交由標籤自己去解析處理。若指定 tagdependent,在標籤體中的全部代碼都會原封不動的交給標籤處理器,而不是將執行結果傳遞給標籤處理器
37 –     JSP:接受全部JSP語法,如定製的或內部的tag、scripts、靜態HTML、腳本元素、JSP指令和動做。
38 -->
39         <body-content>JSP</body-content>
40 <!-- 在attribute標籤中定義自定義標籤的屬性-->
41         <attribute>
42             <description>
43                 Name of the exported scoped variable for the
44                 exception thrown from a nested action. The type of the
45                 scoped variable is the type of the exception thrown.
46             </description>
47 <!-- 自定義標籤屬性的名字-->
48             <name>var</name>
49 <!-- 自定義標籤屬性是否是必須的,取值能夠有true|false|yes|no-->
50             <required>false</required>
51 <!--該屬性 rtexprvalue 的全拼是 runtime expression value 運行時表達式值!該屬性表示是否能夠接受運行時表達式的值。 能夠填的值 yes|false|true|no -->            <rtexprvalue>false</rtexprvalue>
52         </attribute>
53     </tag>
54 </taglib>

這樣咱們就能夠在咱們的JSP頁面中引用咱們本身定義的標籤了!ide

  • 在 JSP 頁面使用 taglib 指令引入標籤庫描述文件:

   <%@ taglib prefix=「」 uri=「」 %>ui

  • uri:屬性用於指定所引入的標籤庫描述(tld)文件中所定義的 <uri> 元素的內容;prefix 屬性用於爲引入的 tld 文件指定一個」引用代號」。prefix 屬性能夠由 jsp 文件的做者任意指定,只要與其餘 taglib 指令的 prefix 屬性值不一樣就能夠。
相關文章
相關標籤/搜索