webber

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            11 Posts :: 2 Stories :: 3 Comments :: 0 Trackbacks
          實(shí)現(xiàn)自定義標(biāo)簽按如下步驟進(jìn)行:
          (1)開發(fā)自定義標(biāo)簽處理類;
          (2)建立一個*.tld 文件,每個*.tld 文件對應(yīng)一個標(biāo)簽庫,每個標(biāo)簽庫對應(yīng)多個標(biāo)簽;
          (3)在web.xml文件中增加自定義標(biāo)簽的定義;
          (4)在JSP 文件中使用自定義標(biāo)簽。
          一、開發(fā)自定義標(biāo)簽處理類
          自定義標(biāo)簽類都必須繼承一個父類: java.Servlet.jsp.tagext.TagSupport 。除此之外,自定義標(biāo)簽類還有如下要求。
          ·如果標(biāo)簽類包含屬性,每個屬性都有對應(yīng)的getter 和setter 方法。
          ·重寫doStartTag()或doEndTag()方法,這兩個方法生成頁面內(nèi)容。
          ·如果需要在銷毀標(biāo)簽之前完成資源回收,則重寫re1ease()方法。
          下面提供了一個最簡單的標(biāo)簽代碼:
          Java代碼
          1. import java.io.IOException;   
          2. import javax.servlet.jsp.JspTagException;   
          3. import javax.servlet.jsp.tagext.TagSupport;   
          4.   
          5. //標(biāo)簽處理類,繼承TagSupport 父類   
          6. publicclass HelloWorldTag extends TagSupport {   
          7.     // 重寫doEndTag方法,該方法在標(biāo)簽結(jié)束生成頁面內(nèi)容   
          8.     publicint doEndTag() throws JspTagException {   
          9.         try {   
          10.             // 獲取頁面輸出流,并輸出字符串   
          11.              pageContext.getOut().write("Hello World");   
          12.          }   
          13.         // 捕捉異常   
          14.         catch (IOException ex) {   
          15.             // 拋出新異常   
          16.             thrownew JspTagException("錯誤");   
          17.          }   
          18.         //返回值   
          19.         return EVAL_PAGE;   
          20.      }   
          21. }  
          import java.io.IOException;
          import javax.servlet.jsp.JspTagException;
          import javax.servlet.jsp.tagext.TagSupport;
          //標(biāo)簽處理類,繼承TagSupport 父類
          public class HelloWorldTag extends TagSupport {
          // 重寫doEndTag方法,該方法在標(biāo)簽結(jié)束生成頁面內(nèi)容
          public int doEndTag() throws JspTagException {
          try {
          // 獲取頁面輸出流,并輸出字符串
          pageContext.getOut().write("Hello World");
          }
          // 捕捉異常
          catch (IOException ex) {
          // 拋出新異常
          throw new JspTagException("錯誤");
          }
          //返回值
          return EVAL_PAGE;
          }
          }


          這是個非常簡單的標(biāo)簽,它只在頁面中生成一個"Hello World" 的字符串。該標(biāo)簽沒有屬性,因此無須提供setter 和getter 方法;此外,該標(biāo)簽無須初始化資源,因此無須重寫init 方法;在標(biāo)簽結(jié)束時無須回收資源,因此無須重寫destroy 方法。

          二、建立TLD 文件
          Xml代碼
          1. <?xmlversion="I.O"encoding="ISO-8859-1"?>  
          2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems,Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_l_2.dtd">  
          3. <taglib>  
          4.     <!--定義標(biāo)簽庫版本-->  
          5.     <tlib-version>1.0</tlib-version>  
          6.     <!--定義JSP 版本-->  
          7.     <jsp-version>1.2</jsp-version>  
          8.     <!--配置第一個標(biāo)簽-->  
          9.     <tag>  
          10.         <!--配置標(biāo)簽名-->  
          11.         <name>helloworld</name>  
          12.         <!--確定標(biāo)簽的處理類-->  
          13.         <tag-class>mytag.HelloWorldTag</tag-class>  
          14.         <!--確定標(biāo)簽的標(biāo)簽體,標(biāo)簽體為空-->  
          15.         <body-content>empty</body-content>  
          16.     </tag>  
          17. </taglib>  
          <?xml version="I.O" encoding="ISO-8859-1"?>
          <!DOCTYPE taglib PUBLIC "-//Sun Microsystems,Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_l_2.dtd">
          <taglib>
          <!--定義標(biāo)簽庫版本-->
          <tlib-version>1.0</tlib-version>
          <!--定義JSP 版本-->
          <jsp-version>1.2</jsp-version>
          <!--配置第一個標(biāo)簽-->
          <tag>
          <!--配置標(biāo)簽名-->
          <name>helloworld</name>
          <!--確定標(biāo)簽的處理類-->
          <tag-class>mytag.HelloWorldTag</tag-class>
          <!--確定標(biāo)簽的標(biāo)簽體,標(biāo)簽體為空-->
          <body-content>empty</body-content>
          </tag>
          </taglib>

          這個標(biāo)簽庫配置文件非常簡單,沒有標(biāo)簽體及標(biāo)簽屬性等。只是一個空標(biāo)簽。

          三、在web.xml 文件中增加標(biāo)簽庫定義
          在web.xml 文件中定義標(biāo)簽庫時使用taglib 元素,該元素包含兩個子元素: taglib-uri
          和taglib-location,前者確定標(biāo)簽庫的URI; 后者確定標(biāo)簽庫定義文件的位置。下面是web.xml 文件中關(guān)于test.tld 標(biāo)簽庫的定義片段:
          Xml代碼
          1. <!--定義標(biāo)簽庫-->  
          2. <taglib>  
          3.     <!--確定標(biāo)簽庫的URI-->  
          4.     <taglib-uri>/tags/tldtest.tld</taglib-uri>  
          5.     <!--確定標(biāo)簽庫定義文件的位置-->  
          6.     <taglib-location>/WEB-INF/tldtest.tld</taglib-location>  
          7. </taglib>  
          <!--定義標(biāo)簽庫-->
          <taglib>
          <!--確定標(biāo)簽庫的URI-->
          <taglib-uri>/tags/tldtest.tld</taglib-uri>
          <!--確定標(biāo)簽庫定義文件的位置-->
          <taglib-location>/WEB-INF/tldtest.tld</taglib-location>
          </taglib>
          如果需要使用多個標(biāo)簽庫,只需要增加多個taglib 元素即可,因?yàn)槊總€taglib 元素可對應(yīng)一個標(biāo)簽庫。

          四、使用標(biāo)簽庫
          (1)導(dǎo)入標(biāo)簽庫:使用taglib 編譯指令導(dǎo)入標(biāo)簽。
          (2)使用標(biāo)簽:在JSP 頁面中使用自定義標(biāo)簽。
          taglib 的語法格式如下:
          Jsp代碼
          1. <%@ taglib uri= "tagliburi" prefix="tagPrefix" %>  
          其中uri 屬性確定標(biāo)簽庫定義文件的URI,這個URI 就是在web.xml 文件中為標(biāo)簽庫定義的URI。而prefix 屬性確定的是標(biāo)簽前綴,即在JSP 頁面中使用標(biāo)簽時,該標(biāo)簽庫負(fù)責(zé)處理的標(biāo)簽前綴。
          使用標(biāo)簽的語法格式如下:
          <tagPrefix : tagName tagAttribute=ntagValue n ...>
          <tagBody/>
          </tagPrefix>
          如果該標(biāo)簽沒有標(biāo)簽體,則可以使用如下語法格式:
          <tagPrefix : tagName tagAttribute=ntagValue n .../>

          五、帶屬性的標(biāo)簽
          帶屬性的標(biāo)簽必須為每個屬性提供對應(yīng)的setter 和getter 方法。其TLD配置如下:
          Xml代碼
          1. <?xmlversion="I.O"encoding="ISO-8859-1"?>  
          2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems,Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_l_2.dtd">  
          3. <taglib>  
          4.     <!--定義標(biāo)簽庫版本-->  
          5.     <tlib-version>1.0</tlib-version>  
          6.     <!--定義JSP 版本-->  
          7.     <jsp-version>1.2</jsp-version>  
          8.     <!--配置第一個標(biāo)簽-->  
          9.     <tag>  
          10.         <!--配置標(biāo)簽名-->  
          11.         <name>query</name>  
          12.         <!--確定標(biāo)簽的處理類-->  
          13.         <tag-class>mytag.QueryTag</tag-class>  
          14.         <!--確定標(biāo)簽的標(biāo)簽體,標(biāo)簽體為空-->  
          15.         <body-content>empty</body-content>  
          16.         <!--配置標(biāo)簽屬性: driver-->  
          17.         <attribute>  
          18.         <name>driver</name>  
          19.         <required>true</required>  
          20.         <rtexprvalue>true</rtexprvalue>  
          21.         </attribute>  
          22.         <!--配置標(biāo)簽屬性: url -->  
          23.         <attribute>  
          24.         <name>url</name>  
          25.         <required>true</required>  
          26.         <rtexprvalue>true</rtexprvalue>  
          27.         </attribute>  
          28.     </tag>  
          29. </taglib>  
          <?xml version="I.O" encoding="ISO-8859-1"?>
          <!DOCTYPE taglib PUBLIC "-//Sun Microsystems,Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_l_2.dtd">
          <taglib>
          <!--定義標(biāo)簽庫版本-->
          <tlib-version>1.0</tlib-version>
          <!--定義JSP 版本-->
          <jsp-version>1.2</jsp-version>
          <!--配置第一個標(biāo)簽-->
          <tag>
          <!--配置標(biāo)簽名-->
          <name>query</name>
          <!--確定標(biāo)簽的處理類-->
          <tag-class>mytag.QueryTag</tag-class>
          <!--確定標(biāo)簽的標(biāo)簽體,標(biāo)簽體為空-->
          <body-content>empty</body-content>
          <!--配置標(biāo)簽屬性: driver-->
          <attribute>
          <name>driver</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
          </attribute>
          <!--配置標(biāo)簽屬性: url -->
          <attribute>
          <name>url</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
          </attribute>
          </tag>
          </taglib>


          頁面中引用如下:
          Jsp代碼
          1. <%@ taglib uri="/tags/tldtest.tld" prefix="mytag" %>   
          2. <mytag:query driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/j2ee"/>  
          <%@ taglib uri="/tags/tldtest.tld" prefix="mytag" %>
          <mytag:query driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/j2ee"/>


          六、帶標(biāo)簽體的標(biāo)簽

          帶標(biāo)簽體的標(biāo)簽,就是允許在標(biāo)簽內(nèi)嵌套標(biāo)簽,通??捎糜谕瓿梢恍┻壿嬤\(yùn)算例如判斷和循環(huán)等。
          帶標(biāo)簽體的標(biāo)簽需要繼承BodyTagSupport,該類包含一個bodyContent 屬性,該屬性代表標(biāo)簽體。
          BodyTagSupport 還包含兩個方法。
          • doAfterBodyO: 每次處理完標(biāo)簽體后調(diào)用該方法。
          • void doInitBodyO: 開始調(diào)用標(biāo)簽體時調(diào)用該方法。

          在處理標(biāo)簽類的各個方法中,不同的返回值對應(yīng)不同的含義,常用的返回值有如下
          幾個。
          • SKIP_BODY: 不處理標(biāo)簽體,直接調(diào)用doEndTag()方法。
          • SKIP_PAGE: 忽略標(biāo)簽后面的JSP 頁面。
          • EVAL_PAGE: 處理標(biāo)簽結(jié)束,直接處理頁面內(nèi)容。
          • EVAL_BODY_BUFFERED: 處理標(biāo)簽體。
          • EVAL_BODY_INCLUDE: 處理標(biāo)簽體,但忽略setBodyContent()和doInitBody()方法。
          • EVAL_BODY_AGAIN: 對標(biāo)簽體循環(huán)處理。
          posted on 2009-12-30 15:16 webber 閱讀(392) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 四平市| 合阳县| 鸡泽县| 上虞市| 蓬安县| 永泰县| 长顺县| 呼伦贝尔市| 岢岚县| 梅州市| 文成县| 卫辉市| 中西区| 密山市| 恩施市| 洱源县| 宁武县| 平塘县| 西和县| 武定县| 沽源县| 敖汉旗| 维西| 万全县| 建水县| 凤冈县| 公安县| 松阳县| 通州区| 班戈县| 当阳市| 江城| 聂拉木县| 柯坪县| 常德市| 阜平县| 嘉鱼县| 江华| 扎兰屯市| 台东县| 四平市|