J2EE社區(qū)

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          TagLib的學(xué)習(xí)

          Posted on 2010-07-09 09:54 xcp 閱讀(3211) 評論(0)  編輯  收藏 所屬分類: JAVA

          http://wenku.baidu.com/view/a6e7f4d233d4b14e8524686a.html


          前言: TagLib可以使程序員自己開發(fā)JSP標(biāo)簽,并且可以重復(fù)利用。

          Part 1 TagLib比JavaBean的優(yōu)勢是什么?
          1.  方便處理網(wǎng)頁內(nèi)容的數(shù)據(jù)
          2.  網(wǎng)頁美工使用TagLib感覺更順手

          Part 2 如何制作和使用TagLib?
          涉及4個(gè)方面:1.標(biāo)記處理類 ;2.標(biāo)記描述文件; 3.JSP 頁面中用<% @  taglib %>引入標(biāo)簽; 4.在Web.xml中描述標(biāo)簽描述文件的位置(可選).

          Part 3 標(biāo)記處理類的API介紹
          主要涉及javax.servlet.jsp.tagext和javax.servlet.jsp兩個(gè)包。Jsp包中主要使用JspWriter 和PageContext類,相當(dāng)與隱藏對象out和pageContext,不細(xì)介紹,下面關(guān)鍵介紹tagext包。
          Tagext包中有兩個(gè)接口Tag,BodyTag和9個(gè)類BodyContent,BodyTagSupport,TagAttributteInfo,TagData,TagExtraInfo,TagInfo,TagLibraryInfo,TagSupport,VariableInfo (粗體下劃線的是最重要的四個(gè)類)

          Part 4 BodyTagSupport和TagSupport的區(qū)別在哪里?
          如果我們要獲取標(biāo)簽中的內(nèi)容,并對它進(jìn)行處理時(shí),比如對標(biāo)簽中間的字符< 替換為'&lt'等,必須繼承自BodyTagSupport,否則繼承TagSupport就足夠了。

          Part 5 TagSupport的API
          最重要的兩個(gè)方法是:
          public int doStartTag() throws JspException
          遇到起始標(biāo)簽進(jìn)行的處理,有兩個(gè)返回值,一個(gè)是Tag.SKIP_BODY,表示起止標(biāo)簽中間的內(nèi)容被忽略,不做執(zhí)行。另一個(gè)是Tag.EVAL_BODY_INCLUDE,表示標(biāo)記中間的內(nèi)容被正常執(zhí)行。
          public int doEndTag() throws JspException
          遇到結(jié)束標(biāo)簽進(jìn)行的處理,有兩個(gè)返回值,一個(gè)是Tag.SKIP_PAGE,       表示執(zhí)行立即結(jié)束,網(wǎng)頁上剩余部分都被忽略。另一個(gè)是Tag.EVAL._PAGE表示JSP Page都能正常執(zhí)行。


          Part 6 如何處理標(biāo)簽的屬性?
          如果標(biāo)簽類似<prefix:myTag attr1=”123”> …</prefix:myTag>,處理類中必須寫類似JavaBean的set和get方法。示例如下:
          private int attr1;
          public void setAttr1(int value)
          {this.attr1=value;}
          public int getAttr1()
          {return this.attr1;}
          注意:屬性id,不用在標(biāo)簽處理類中實(shí)現(xiàn)get set代碼,只需要在描述文件中指出id屬性。


          Part 7 BodyTagSupport的API
          BodyTagSupport類繼承TagSupport,有以下六個(gè)常用方法:
          public int doStartTag() throws JspException
          功能與TagSupport中一樣,返回值有Tag.SKIP_BODY和Tag.EVAL_BODY_BUFFERED,Tag.SKIP_BODY表示標(biāo)簽中間的內(nèi)容被忽略,Tag. EVAL_BODY_BUFFERED表示標(biāo)記中間的內(nèi)容被執(zhí)行,處理結(jié)果被放入BodyContent類中。
          public int doEndTag() throws JspException
          功能與返回值跟TagSupport中一樣。
          public void doInitBody() throws JspException
          讓用戶能夠新增初始值
          public int doAfterBody() throws JspException
          功能是讓用戶決定是否重新處理標(biāo)記中間的內(nèi)容,返回值有Tag.SKIP_BODY和BodyTag.EVAL_BODY_TAG,表示會(huì)重復(fù)不斷地處理標(biāo)記之間的內(nèi)容。
          public BodyContent getBodyContent()
          獲取標(biāo)簽的內(nèi)容,以便于進(jìn)行處理。
          public void setBodyContent(BodyContent b)
          設(shè)置標(biāo)簽內(nèi)容。

          Part 8 TagExtraInfo 和 VariableInfo
          這兩個(gè)類結(jié)合使用的目的是,在標(biāo)簽外部獲取標(biāo)簽處理類中保存在頁面的對象。該對象如果是JavaBean,則可以直接用<jsp:getProperty name=”id” property=”xxx”>取得該javabean的屬性值,id是所保存的頁面對象對應(yīng)的變量名。標(biāo)簽外部包括:<prefix:mytag>開始到Page結(jié)束的范圍,</prefix:mytag>開始到Page結(jié)束的范圍,<prefix:mytag>和</prefix:mytag>中間的范圍。
          TagExtraInfo類最重要的一個(gè)方法是
          public VariableInfo[] getVariableInfo(TagData data)
          功能是返回所有的與此TagExtraInfo相關(guān)聯(lián)的標(biāo)簽定義類里的變量信息。
          VariableInfo類的構(gòu)造函數(shù)
          public VariableInfo(String ID,String ClassName,Boolean Declare, int Scope)
          ID表示變量名稱
          ClassName表示類的名稱
          Declare表示之前是否申明過
          Scope表示變量的使用范圍:VariableInfo.AT_BEGIN表示從標(biāo)簽起始位置到Page結(jié)束,VariableInfo.AT_END表示標(biāo)簽結(jié)束位置到Page結(jié)束,VariableInfo.NESTED表示標(biāo)簽起止中間的范圍。

          Part 9 標(biāo)記描述文件
          標(biāo)記描述文件是XML格式的文件,分三層來介紹:
          第一層<taglib>是根元素,包括下列子元素
          <tlibversion>
          Tag Library的版本
          <jspversion>
          jsp的版本
          <shortname>
          定義Tag Library taglib命令中默認(rèn)的Prefix值
          <uri>
          說明Tag Libray的文件來源,通常是空的
          <info>
          用來描述此TagLib的相關(guān)信息
          <tag>表示用戶子定以的標(biāo)記,作為第二層詳細(xì)介紹
          第二層 <tag>描述文件的關(guān)鍵部分,包括下列子元素
          <name>
          用戶定義的Tag名稱
          <tagclass>
          標(biāo)簽的處理類全名稱
          <teiclass>
          TagExtraInfo類的全名稱
          <bodycontent>
          三種值:empty,JSP,tagdependent。empty表示沒有body,JSP表示body中可以加入JSP程序代碼,tagdependent表示內(nèi)容交給tag自己處理
          <info>
          說明此tag的相關(guān)內(nèi)容
          <attribute>標(biāo)簽的屬性,作為第三層介紹
          第三層 <attribute>有3個(gè)子元素
          <name>
          屬性的名稱
          <required>
          屬性必須存在? true為是,false是否,默認(rèn)是false。
          <rtexprvalue>
          屬性值是否可以為表達(dá)式,true為是,false為否。例如:是否可以這樣使用?
          <prefix:mytag num=”<%=request.getParameter(\” num\”)%>”/>

          Part 10 如何在頁面使用TagLib?
          在頁面先引入tag,然后就可以使用。其中uri指明taglib描述文件的路徑,prefix表示標(biāo)簽的前綴。
          <%@ taglib uri="/WEB-INF/MyTagLib.tld" prefix="mytag"%>
          <h1><mytag:Hello/></h1>

          Part 11 在Web.xml中設(shè)定taglib的uri假名。
          <taglib>
             <taglib-uri>
                Taglib
             </taglib-uri>
             <taglib-location>
                /WEB-INF/MyTaglib.tld
             </taglib-location>
          </taglib>
          使用方式:
          <%@ taglib uri=”Taglib” prefix=”myTag”%>
          好處是,每次引入taglib時(shí)不用寫長路徑名稱,并且改變了taglib描述的位置,只需要修改一個(gè)地方.



           




          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個(gè)方案乄而不是創(chuàng)造一個(gè)方案こ
          mail: 聯(lián)系我


          主站蜘蛛池模板: 昌黎县| 宿州市| 刚察县| 黑河市| 榆中县| 太仓市| 永年县| 玉山县| 平塘县| 科技| 乌兰察布市| 邵阳县| 周口市| 峨边| 涿鹿县| 侯马市| 铁力市| 利辛县| 方山县| 本溪| 赫章县| 鹰潭市| 桃园县| 洛扎县| 萍乡市| 莎车县| 宜丰县| 康定县| 饶河县| 保山市| 集贤县| 惠东县| 沙雅县| 固阳县| 湘潭市| 永登县| 高台县| 吐鲁番市| 家居| 青龙| 尼玛县|