1. 程式人生 > >自定義標籤的實現與基礎知識

自定義標籤的實現與基礎知識

         自定義標籤

 1.自定義標籤怎麼實現

1)建立一個類它的介面為simpleTag

    public class MyTag implements SimpleTag {

       //未實現的方法

其中setJspContext(JspContext arg0)方法可以獲取包含jsp中的其他8

個隱藏物件,通過這8個物件可以在頁面中進行任何操作通過doTag()方法。且setJspContext方法比dotag方法先呼叫

public void setJspContext(JspContext arg0) {

pageContext = (PageContext) 

arg0;

}

   2)在WEB-INF中建立一個xml格式,字尾名為tld的檔案

     

   3)在tld設定標籤的各種引數和屬性

  <?xml version="1.0" encoding="UTF-8"?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

    version="2.0">

    <!-- 描述TLD檔案 -->

    <description>Mytag 1.0 core library</description>

    <display-name>Mytag core</display-name>

    <tlib-version>1.1</tlib-version>

    <!-- 建議在JSP頁面使用的標籤字首 -->

    <short-name>c1</short-name

>

    <!-- 作為TLD檔案的id,用來唯一標識當前的TLD檔案,多個tld檔案的URI不能重複。通過JSP頁面的taglib

     標籤的URI屬性來引用 -->

    <uri>http://www.tarena.com.cn/mytag1</uri>

   <!-- 描述自定義的mytag標籤 -->

    <tag>

       <!-- 標籤的名字 -->

       <name>date</name>

       <!-- 標籤所在的全類名 -->

       <tag-class>com.stupid.mytag.MyTag</tag-class>

       <!-- 標籤額型別 -->

       <body-content>empty</body-content>

    </tag>

</taglib>

   4)要使用標籤需要在頁面中插入包含此標籤的引用,匯入標籤庫

    <!--匯入標籤庫(描述檔案) prefix為標籤的字首,uri為該TLD檔案的唯一標識-->

<%@ taglib prefix="c1"  uri="http://www.tarena.com.cn/mytag1"%>

   5)使用標籤:c1為字首名,date為標籤名

   <c1:date/>

  1. 標籤的形式

  1. 帶屬性的自定義標籤

 ①現在標籤處理器類中定義setter方法,建議把所有屬性型別設定為String型別

private String name;

private String count;

public void setName(String name) {

this.name = name;

}

public void setCount(String count) {

this.count = count;

}

 ②在TLD描述檔案中來描述屬性

     <!-- 描述當前的屬性 -->

       <attribute>

          <!-- 屬性名 -->

         <name>name</name>

         <!-- 該屬性是否必須 -->

         <required>true</required>

         <!-- 當前屬性是否可以接受執行時表示式的動態值 -->

         <rtexprvalue>true</rtexprvalue>

       </attribute>

           <!-- 描述當前的屬性 -->

       <attribute>

          <!-- 屬性名 ,需與標籤處理類的setter方法定義的屬性相同-->

         <name>count</name>

         <!-- 該屬性是否必須 -->

         <required>true</required>

         <!-- 當前屬性是否可以接受執行時表示式的動態值 -->

         <rtexprvalue>true</rtexprvalue>

       </attribute>

 ③在jsp頁面使用

   <c1:date name="qiujiale" count="10"/>