天天看點

JSP2.0的福利(标簽檔案)前言标簽檔案簡介第一個标簽檔案新知識點-doBody-invoke

  這次講的是jsp2.0的特性之一,我們可以編寫标簽檔案,指沒有标簽處理器和标簽類庫描述符的定制動作指令,不編譯,無标簽類描述符。

    本文結構:

  tag檔案隻是以tag為字尾名的文本檔案。除了jsp頁面指令外,其他jsp元素都可以出現在tag檔案中頁面引用格式。一,不需要編譯,隻要jsp文法即可,這意味不懂java的人也可以編寫。二,不許需要面搜标簽庫描述符。

   格式:

      tagdir:用于指定tag檔案目錄,當頁面使用<ui:xxxx>進,會查找該目錄下對應的xxxx.tag檔案。

      prefix:指定使用時标簽字首

  使用:

  

  包結構圖和效果圖(将伺服器目前時間顯示):

     

JSP2.0的福利(标簽檔案)前言标簽檔案簡介第一個标簽檔案新知識點-doBody-invoke
JSP2.0的福利(标簽檔案)前言标簽檔案簡介第一個标簽檔案新知識點-doBody-invoke

    感興趣不?往下看吧

  firsttag.tag:

  firsttagtest.jsp

  taglib、include、attribute、variable。

1)

  #tag 指令如同jsp網頁的page指令,用來設定标簽檔案。

  #display-name表示圖形化開發工具顯示<display-name>所指定 的名稱;

  #body-content表示可能的值有三種,分别是empty、scriptless、tagdependent、empty。

    empty為标 簽中沒有主體内容,

    scriptlet為标簽中的主體内容el、jsp動作元素,但不可以為jsp腳本元素,

    tagdependent表示标簽中的主體内 容交由tag自己去處理,預設值為scriptless;

  #dynamic-attributes表示設定标簽檔案動态屬性的名稱,當dynamic- attributes設定時,将會産生一個map類型的集合對象,用來存放屬性的名稱和值;

  #small_icon表示在圖形化開發工具顯 示<small-icon>所指定的tld相對路徑的小圖示,大小為16x16;

  #large-icon表示在圖形化開發工具顯 示<large-icon>所指定的tld相對路徑的大圖示,大小為32x32;

  #description表示用來說明此标簽檔案的相關信 息;

  #example表示用來增加更多的标簽使用說明,包括标簽應用時的範例;

  #language、import、pageencoding、 iselignored這些屬性與page指令相對應的屬性相同。

2)

  這 個指令用來設定自定義标簽的屬性。其中name表示屬性的名字;

  required表示是否為必要,預設為false;

  rtexprvalue表示屬性值是 否可以為run-time表達式。如為true,表示屬性可用動态的方式來指定,如:<mytag:read num="${param.num}"/>,如為false,則一定要用靜态的方式來指定屬性值;

  type表示這個屬性的類型,預設值為 java.lang.string;description用來說明此屬性的相關資訊

3)

  這 個指令用來設定标簽檔案的變量。其中name-given表示直接指定變量的名稱;

  name-from-attribute表示以自定義标簽的某個屬性值 為變量名稱;

  alias表示聲明一個局部範圍屬性,用來接收變量的值;variable-class表示變量的類名稱,預設值為 java.lang.string;

  declare表示此變量是否聲明預設值為true;scope表示此變量的範圍,範圍是:at_begin、 at_end和nested,預設值為nested;description用來說明此變量的相關資訊

········variable案例引出 dobody

   jar結構 和 效果圖

      

JSP2.0的福利(标簽檔案)前言标簽檔案簡介第一個标簽檔案新知識點-doBody-invoke
JSP2.0的福利(标簽檔案)前言标簽檔案簡介第一個标簽檔案新知識點-doBody-invoke

dobodydemo.tag

dobodytest.jsp

  <jsp:dobody>與<jsp:invoke>動作元素,前者是用來處理卷标本體文字,後者則是用來設 定标簽間的fragment,下面兩個動作元素搭配着attribute與variable兩個指令元素。

  

  首先介紹<jsp:dobody>您可以用它來決定是否顯示本體文字,例如撰寫如下的tag file:

check.tag

  必須先說明的是,這邊使用了scriptlet,這并不是一個良好的示範,若能搭配jstl或自訂标簽庫來完成tag file的撰寫會是比較好的,這邊純綷是為了說明友善才使用了scriptlet。

  上面這個tag

file會檢查傳入的屬性password是否符合我們設定的密碼,如果符合就執行<jsp:dobody>,表示顯示卷标之間的本體文字,

否則顯示密碼不正确的訊息,attribute指令元素可以指定自訂卷标所使用的屬性文字,可以使用下面的jsp網頁來測試:

test.jsp

  您可以發現,tag file即使是用來當作自訂标簽庫的簡便方式,也是十分的友善,不需要在tld檔中作額外的設定,也可以得到相關的功能。

attribute除了指定屬性文字之外,也可以将屬性當作fragment傳入,友善在tag file中作個别的處理,例如下面撰寫一個table.tag:

table.tag

在這個tag file中,将attribute的屬性設定為fragment,然後想取得指定的fragment的話,就可以使用<jsp: invoke>動作元素,并指定fragment的名稱,使用下面這個jsp網頁來測試:

在jsp網頁中,同樣的是使用<jsp:attribute>來說定fragment的文字内容,執行這個jsp網頁,會傳回以下的内容:

在tag file與jsp網頁之間,可以使用variable指令元素設定scripting variable,以在兩者之間傳遞變量内容,例如撰寫以下的tag file:

precode.tag

在這個tag file中,使用variable設定scripting

variable為"code",作用範圍為"nested",也就是在起始卷标與結束卷标之間,而其中<jsp:dobody>中多了一項

屬性var,表示在jsp網頁中的<jsp:body>卷标中的文字内容将設定給"code"變量,可以用下面這個jsp網頁來測試:

<jsp:body>之間的虛拟程式代碼将會傳入給"code"變量,由于它是scripting

variable,可以在标簽之内起作用,是以在<jsp:attribute>中的el式${code}可以取得tag

file中"code"的内容,也就是<jsp:body>傳入的文字,之後我們将<jsp:attribute>的内容當作

fragment在tag file中作處理,結果将會如以下的網頁: