飛艷小屋

          程序--人生--哲學___________________歡迎艷兒的加入

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks

          jsp自定義標簽

          關鍵詞jsp自定義標簽 ?? ??????????????????????????????????????

          定義標簽

          要定義標簽,需要:

          ·? 為該標簽開發一個tag handler和helper類

          ·? 在標簽庫描述符中聲明這個標簽

          本節描述標簽handler和TLD的屬性,并解釋如何為在前面幾節中介紹的標簽開發tag handler和庫描述符元素。

          標簽handler

          標簽handler是由Web容器調用的一個對象,用于執行帶有自定義標簽的JSP頁面時對這個標簽進行判斷。標簽handler必須實現Tag或者BodyTag接口。接口可以用于接受現有Java對象并使它成為標簽handler。對于新創建的處理器,可以用TagSupportBodyTagSupport類作為基類。這些類和接口包含在javax.servlet.jsp.tagext包中。

          JSP頁面的servlet在對標簽處理的不同階段調用由Tag和BodyTag接口定義的標簽handler。遇到自定義標簽的開始標簽時,JSP頁面的servlet調用方法以初始化相應的handler,然后調用handler的doStartTag方法。遇到自定義標簽的結束標簽時,調用處理器的doEndTag方法。在標簽handler需要與標簽的正文交互時調用其他方法,見帶正文的標簽。為了提供標簽handler的實現,必須實現在處理標簽的不同階段調用的方法,在表16-1中匯總了這些方法。

          16-1標簽handler方法

          標簽handler類型

          方法

          簡單

          doStartTag, doEndTag, release

          屬性

          doStartTag, doEndTag, set/getAttribute1...N, release

          正文、判斷且無交互

          doStartTag, doEndTag, release

          正文、迭代判斷

          doStartTag, doAfterBody, doEndTag, release

          正文、交互

          doStartTag, doEndTag, release, doInitBody, doAfterBody, release

          標簽handler可以使用一個能讓它得以與JSP頁面通信的API。到API的入口點是頁面上下文對象(javax.servlet.jsp.PageContext),通過它標簽handler可以獲取JSP頁面能夠訪問的所有其他隱式對象(請求、會話和應用程序)。

          隱式對象可以有與其相關聯的命名屬性。可以用[set|get]Attribute方法訪問這種屬性。

          如果標簽是嵌入的,標簽handler還可以訪問與外圍標簽關聯的handler稱為parent)。

          一組相關的標簽handler類(標簽庫)一般是打包的且作為JAR文檔部署。

          標簽庫描述符

          標簽庫描述符(TLD)是一個描述標簽庫的XML文檔。TLD包含有關整個庫以及庫中包含的每一個標簽的信息。Web容器用TLD驗證標簽,JSP頁面開發工具也使用TLD。

          TLD文件名必須有擴展名.tld。TLD文件也儲存在WAR文件的WEB-INF目錄中或者在WEB-INF的子目錄中。

          TLD必須以指定XML的版本和文檔類型定義(DTD)的XML文檔序言(prolog)開始。

          <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

          Tomcat支持版本 1.1和1.2的DTD。不過,本章所討論的是1.2版本,因為在開發的所有標簽庫中都應該使用最新的版本。模板庫TLDtutorial-template.tld符合版本1.2。Struts庫TLD符合版本1.1的DTD,它的元素要少,且其中一些元素使用了稍微不同的名字。

          TLD的根是taglib元素。表16-2中列出了taglib的子元素:

          16-2 taglib子子元素?

          元素

          說明

          tlib-version

          標簽庫的版本

          jsp-version

          這個標簽庫要求的JSP規范版本

          short-name

          JSP頁面編寫工具可以用來創建助記名的可選名字

          uri

          唯一標識該標簽庫的的URI

          display-name

          將由工具顯示的可選名

          small-icon

          將由工具使用的可選小圖標

          large-icon

          可被工具使用的可選大圖標

          description

          可選的標簽特定信息

          listener

          listener元素

          tag

          tag元素

          ?

          listener元素

          標簽庫可以指定一些事件監聽器類(見處理Servlet生命周期事件)。這些監聽器在TLD中作為listener元素列出,Web容器將初始化監聽器類并以類似在WAR級定義的監聽器的方式注冊它們。與WAR級監聽器不同,這里沒有指定標簽庫監聽器注冊的順序。listener元素的唯一子元素是listener-class元素,它必須包含監聽類的完全限定名。

          tag元素

          庫中的每一個標簽都由給出其名字和其標簽handler的類、在由標簽創建的腳本變量上的信息以及標簽屬性上的信息描述。腳本變量信息可以在TLD中直接給出,也可以通過tag extra info類給出(見定義腳本變量的標簽)。每一個屬性聲明包含指明屬性是否是必需的、其值是否可以由請求時表達式確定以及屬性類型的內容(見屬性元素)。

          在tag元素中的TLD中指定標簽。在表16-3中出了tag的子元素:

          16-3 標簽子元素

          元素

          說明

          name

          唯一標簽名

          tag-class

          標簽handler類的完全限定名

          tei-class

          javax.servlet.jsp.tagext.TagExtraInfo的可選子類。見提供有關腳本變量的信息

          body-content

          正文內容類型。見body-conten元素body-content元素

          display-name

          由工具顯示的可選名

          small-icon

          可以由工具使用的小圖標

          large-icon

          可以由工具使用的大圖標

          description

          可選的標簽特定的信息

          variable

          可選的腳本變量信息。見提供有關腳本變量的信息

          attribute

          標簽屬性信息。見Attribute 元素

          下面幾節描述開發在標簽類型中介紹的每一種類型的標簽所需要的方法和TLD。

          簡單標簽

          標簽handler

          簡單標簽的handler必須實現Tag接口的doStartTag和doEndTag方法。在遇到開始標簽時調用doStartTag方法。因為簡單標簽沒有正文,所以這個方法返回SKIP_BODY。在遇到結束標簽時調用doEndTag方法。如果要對頁面的其他部分進行判斷,則doEndTag方法需要返回EVAL_PAGE,否則,它就返回SKIP_PAGE。

          在第一節討論的簡單標簽

          <tt:simple />

          由下列標簽handler實現:

          public SimpleTag extends TagSupport {
          ??public int doStartTag() throws JspException {
          ????try { ??????pageContext.getOut().print("Hello.");
          ????} catch (Exception ex) {
          ??????throw new JspTagException("SimpleTag: " +
          ????????ex.getMessage()); ????}
          ????return SKIP_BODY; ??}
          ??public int doEndTag() {
          ????return EVAL_PAGE;
          ??}
          }

          body-content元素

          沒有正文的標簽必須用body-content元素聲明它們的正文內容是空的:

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

          posted on 2006-08-11 17:08 天外飛仙 閱讀(931) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 赤城县| 乃东县| 扶沟县| 太原市| 阿克苏市| 高碑店市| 鹤峰县| 叶城县| 荃湾区| 太原市| 九台市| 灵丘县| 大庆市| 寿宁县| 五寨县| 普陀区| 长海县| 襄汾县| 德令哈市| 墨竹工卡县| 杭锦旗| 浑源县| 凌云县| 抚州市| 塔城市| 平顶山市| 涿鹿县| 封丘县| 伊宁市| 徐汇区| 津市市| 历史| 南安市| 乐业县| 白河县| 左云县| 柳林县| 陵川县| 洞头县| 芜湖市| 台安县|