2012年8月4日 星期六

[教學] 在 SCWCD 考試內的開發 Custom Tag


[教學] 在 SCWCD 考試內的開發 Custom Tag

目的:模仿 JSTL 的 <c:out>, 撰寫自己的 Tag(<mchen:out>)

所須步驟
1. 撰寫 TLD
2. 撰寫相對類別

以下的程序使用 NetBeans 6.1 為開發工具
撰寫 TLD 的步驟
1.1 在 NetBeans, 選 [File]-[New File], Categories 選 [Web] File Types 選 [Tag Library Descriptor]
1.2 [TLD Name]: tldtest [URI]: http://www.mchen.org/tldtest(您可以輸您任意的URL)

將產出的TLD 檔的修正如下
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd">
  3.   <tlib-version>1.0</tlib-version>
  4.   <short-name>tldtest</short-name>
  5.   <uri>[url=http://www.mchen.com/tldtest%3C]http://www.mchen.com/tldtest<[/url];/uri>
  6.   <tag>
  7.       <name>test</name>
  8.       <tag-class>webtest.TagTest</tag-class>
  9.       <body-content>empty</body-content>
  10.   </tag>
  11. </taglib>
複製代碼
2. 撰寫相對類別
webtest.TagTest 必須implements javax.servlet.jsp.tagext.Tag 
以下的程序為在 NetBeans 中建立類別的步驟
2.1 在 NetBeans 加入 import javax.servlet.jsp.tagext.*;
2.2 在 TagTest 內按右鍵, 選 [Insert Code]-[implement method]
2.3 將 TagTest 程式碼修正如下
  1. package webtest;
  2. import javax.servlet.jsp.*;
  3. import javax.servlet.jsp.tagext.*;
  4. public class TagTest implements Tag {
  5.     private Tag parent;
  6.     private PageContext pageContext;
  7.     public int doEndTag() throws JspException {
  8.         return this.SKIP_PAGE;
  9.     }
  10.     public int doStartTag() throws JspException {
  11.         try {
  12.             JspWriter out = pageContext.getOut();
  13.             out.print("<font color='red'>Hello TagTest</font>");
  14.         } catch (Exception ex) {
  15.             ex.printStackTrace();
  16.         }
  17.         return this.SKIP_BODY;
  18.     }
  19.     public Tag getParent() {
  20.         return parent;
  21.     }
  22.     public void release() {
  23.     }
  24.     public void setPageContext(PageContext arg0) {
  25.         this.pageContext = arg0;
  26.     }
  27.     public void setParent(Tag arg0) {
  28.         this.parent = arg0;
  29.     }
  30. }
複製代碼
接下來, 您就可以使用 Custom Tag 了
JSP 範例
  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3.    "http://www.w3.org/TR/html4/loose.dtd">
  4.    <%@ taglib uri="http://www.mchen.com/tldtest" prefix="mchen" %>
  5. <html>
  6.     <head>
  7.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8.         <title>JSP Page</title>
  9.     </head>
  10.     <body>
  11.         <mchen:test/>
  12.     </body>
  13. </html>
複製代碼

沒有留言:

張貼留言