Jakarta Struts 編程:使用Tiles框架(第三部分)javaduke 發(fā)表于 2003-11-28點(diǎn)擊數(shù):5968 評論數(shù):0 評價(jià):14/8 關(guān)鍵詞:Struts Tiles 作者: Chuck Cavaness
原文: http://www./pub/a/onjava/excerpt/progjakstruts_14/index3.html 譯者: blasterboy Email: zhangjy@bpusoft.com.cn MSN: sinogod928@hotmail.com 這是Jakarta Struts編程一書中使用 Tiles框架系列的第三部分,主要闡述了如何使用標(biāo)記庫(包括:insert, definition, put, putList, add, get, getAsString, useAttribute, importAttribute, and initComponentDefinitions). Tiles標(biāo)記庫(The Tiles Tag Library) 這一部分介紹Tiles 框架使用的JSP自定義標(biāo)記。表14-1列出了框架可用的標(biāo)記 。這些標(biāo)記與其他一些基于模板的框架所提供的標(biāo)記是非常相似的,但是Tiles框架中蘊(yùn)含著更豐富的功能。 標(biāo)記名(Tag name) 描述(Description) Add 增加一個(gè)元素到環(huán)境列表中。 definition 創(chuàng)建一個(gè)Tiles組件定義。 Get 從請求作用域中得到內(nèi)容(content),這個(gè)內(nèi)容是put 標(biāo) 記所置入的。 GetAsString 傳遞tile/component/template屬性指定的值到當(dāng)前的 JspWriter中。 importAttribute 引入一個(gè)Tiles屬性到指定的上下文(context)中; initComponentDefinitions 初始化一個(gè)Tiles定義工廠。 Insert 插入一個(gè)Tiles組件。 Put 設(shè)置一個(gè)屬性到一個(gè)Tiles上下文中。 PutList 聲明一個(gè)列表,這個(gè)列表作為一個(gè)屬性被傳遞。 useAttribute 在頁面中使用一個(gè)屬性值。 insert 標(biāo)記 insert 標(biāo)記是負(fù)責(zé)頁面中插入內(nèi)容。在一個(gè)Tiles布局中, insert標(biāo)記使用屬性值指定的內(nèi)容。在非Tile布局中,insert標(biāo)記是用來獲得一個(gè)框架(layout)并且使用put 標(biāo)記把內(nèi)容傳遞給布局中。 表14-2列出insert 標(biāo)記的屬性: 屬性名(Attribute name) 描述(Description) attribute 當(dāng)前Tiles /組件上下文的屬性名稱,這個(gè)屬性值是由 name 屬性來傳遞的。 beanName Bean 的名稱作為值來使用.Bean是從指定的內(nèi)容中獲得。 如果有的話,Bean可以從指定的上下文中獲得。否則就得 使用pageContext.findAttribute( ) 方法獲得。 如果 beanProperty 屬性已經(jīng)指定,也可以從相應(yīng)Bean屬性中 獲得這個(gè)值 。 如果,這個(gè)Bean(或Bean的屬性值)是某個(gè)屬性類 (Direct, Instance,等等)的實(shí)例, 那么插入過程要依照類 的類型而定。另外,調(diào)用Bean 的toString( ) 方法,并返 回值為String,并傳給name屬性。 beanProperty Bean 屬性(property)的名字,如果指定,那么這個(gè)值從 Bean的屬性(property)中獲得. beanScope Bean的作用范圍,如果沒有指定, pageContext.findAttribute( ) 方法可以使用。Bean的 范圍可以是任何的JSP, 組件(component),或者模板 (template)。在后兩者情況(組件,模板),bean 可 以在 Tiles (tile)/組件(component)/模板(template) 內(nèi)容中 component 一個(gè)描述tile 或者 模板(template)URI的字符串. 模板 (template),頁(page)和 組件(component)屬 性必須有嚴(yán)格相同的行為 controllerUrl 在頁被插入前,控制器(controller)的直接URI 。 這個(gè)URI 通常用來指示一個(gè)struct action. 這個(gè)控制器(action) 是用 來為inserted tile 準(zhǔn)備數(shù)據(jù)的。 只能有 一個(gè)controllerUrl 或 controllerClass controllerClass 頁面(page)被插入前,直接調(diào)用的一種控制(control)類 的類型。這個(gè)類是用來為inserted tile 準(zhǔn)備數(shù)據(jù)的。 只能有 一個(gè)controllerUrl 或 controllerClass 。這個(gè)類 實(shí)現(xiàn)或擴(kuò)展下列類之一: org.apache.struts.tiles.Controller, org.apache.struts.tiles.ControllerSupport, 或org.apache.struts.action.Action. definition Insert定義的名稱。定義在一個(gè)集中的文件中被定義?,F(xiàn) 在,僅僅一個(gè)工廠(factory)的定義可以用這個(gè)屬性插入。 插入一個(gè)用definition定義的定義,用beanName="". flush true 或者 false. 如果true, 當(dāng)前頁會在tile insertion.前 輸出流 ignore 如果這個(gè)屬性設(shè)置為 true 并且name所指定的屬性不存在的 話,僅僅會返回一個(gè)什么都沒有寫得結(jié)果。初始值設(shè)置為 false,可以拋出一個(gè) runtime exception name 一個(gè)要被插入得實(shí)體(entity)的名字。查找按照下面的順 序 definition, attribute, 然后 page. page 一個(gè)表示tile 或者 template 的URI字符串。template, page, 和 component 屬性要嚴(yán)格的有同樣的行為 role 如果用戶是指定的角色,那么這個(gè)標(biāo)記才會起作用,否則, 這個(gè)標(biāo)記會被忽略掉,并且不會寫出任何內(nèi)容。 template 一個(gè)表示tile 或者 template 的URI字符串。template, page, 和 component 屬性要嚴(yán)格的有同樣的行為 definition 標(biāo)簽 definition 標(biāo)簽用bean的定義方法創(chuàng)建一個(gè)tile (template),這個(gè)新創(chuàng)建的bean在requested scope用一個(gè)id來標(biāo)識。definition 標(biāo)簽的有些語法和insert 一樣。新的定義可以擴(kuò)展在definition factory (XML file)中已經(jīng)描述過的定義,并且可以重載以前定義的參數(shù)。 屬性名 描述 extends 可以用來擴(kuò)展的父定義,這個(gè)父定義在definitions factory被 定義了。 id 定義bean的名稱,這個(gè)屬性是必需的 page 要插入template/component 的URL 。和template.一樣。 role 在插入一個(gè)定義前,進(jìn)行檢查role.如果當(dāng)前用戶并沒有定義這個(gè) role,那么這個(gè)定義將不會被插入。再插入的時(shí)候進(jìn)行檢查, 而不是在定義的時(shí)候。 scope 在新定義bean 的時(shí)候被創(chuàng)建。如果沒有指定, 默認(rèn)值是page scope. template tile/component/template (a JSP page)的URL . 下面的片斷展示了如何在JSP中使用definition標(biāo)簽。
一個(gè)完整的例子將在這章后面的"Declaring Definitions in a JSP Page" 中展示 put 標(biāo)簽 put 標(biāo)簽用來傳遞屬性到一個(gè)tile 組件。 這個(gè)標(biāo)簽只能在insert 或 definition 標(biāo)簽內(nèi)部使用。 put標(biāo)簽的值被value 屬性或者標(biāo)簽體指定。也經(jīng)常被指定值得類型。 string: 文如其名 page 或template: 內(nèi)容包含指定的URL. 名字通常以URL用. definition: 內(nèi)容從指定(from factory)的定義獲得. 名字以已定義的名字使用。如果type 已經(jīng)使用, 他就會被get 或 insert 標(biāo)簽插入到tile. 如果type 屬性沒有被指定,則內(nèi)容是不確定的untyped,除非它來自一個(gè)typed bean. 提示: Setting direct="true" 與setting type="string" 是相同的. 屬性名 描述 beanName Bean 的名稱,和值(value)的使用方法一樣.Bean是從 特殊的內(nèi)容中獲得。如果有的話,還可以用 pageContext.findAttribute( ) 方法獲得。 如果 beanProperty 屬性已經(jīng)指定,可以從相應(yīng)Bean屬性中獲 得這個(gè)值 。 beanProperty Bean 屬性(property)的名字,如果指定,那么這個(gè)值從 Bean的屬性(property)中獲得. beanScope Bean的作用范圍,如果沒有指定, pageContext.findAttribute( ) 方法可以使用。Bean的 范圍可以是任何的JSP, 組件(component),或者模板 (template)。在后兩者情況(組件,模板),bean 可以 在 Tiles (tile)/組件(component)/模板(template) 內(nèi) 容中 content Content 在tile 范圍內(nèi)。 屬性相當(dāng)于value 屬性,增加是 為了于JSP template tags 兼容。. Direct Content的控制方法: true意味著Content直接顯示; false 意味著content 被包含。 false 是默認(rèn)值。也是指定 content 類型的一種方法。如果 direct="true", content 是 "string"; 如果 direct="false", content 是 "page". 增加這個(gè)屬性是為了于JSP template tags 兼容。. Name 屬性的名稱(name). Role 如果用戶是指定的角色,那么這個(gè)標(biāo)記才會起作用,否則, 這個(gè)標(biāo)記會被忽略掉,并且不會寫出任何內(nèi)容。 Type content 的類型(type)。有效值 是"string", "page", "template", 或 "definition". Value 屬性的值,可以是String 或者 Object. 值是直接被分配 的。 (value="aValue") 或者從一個(gè)bean 獲得。一個(gè) value, content, 或 beanName 一定存在。 putList 標(biāo)簽 putList 標(biāo)簽建立一個(gè)list,在 tile 中以值傳遞。 list 元素用add 標(biāo)簽增加。這個(gè)標(biāo)簽只能在insert 或definition 標(biāo)簽中使用。 屬性名 描述 Name List 的名稱。這個(gè)屬性是被要求的。 add 標(biāo)簽 add 標(biāo)簽是增加一個(gè)element 到周圍的list 中。這個(gè)標(biāo)簽只能在putList 標(biāo)簽中使用。這個(gè)值可以直接被分配。 (value="aValue") 或者從一個(gè)bean中獲得。 一個(gè)value 或beanName 必須被指定。 屬性名 描述 beanName Bean 的名稱,和值(value)的使用方法一樣.Bean 是從特殊的內(nèi)容中獲得。如果有的話,還可以用 pageContext.findAttribute( ) 方法獲得。 如果 beanProperty 屬性已經(jīng)指定,可以從相應(yīng)Bean屬性 中獲得這個(gè)值 。 beanProperty Bean 屬性(property)的名字,如果指定,那么這 個(gè)值從Bean的屬性(property)中獲得. beanScope Bean的作用范圍,如果沒有指定, pageContext.findAttribute( ) 方法可以使用。 Bean的范圍可以是任何的JSP, 組件 (component),或者模板(template)。在后兩者 情況(組件,模板),bean 可以在 Tiles (tile)/組件 (component)/模板(template) 內(nèi)容中content 和value 屬性相同。增加這個(gè)屬性是為了于JSP template tags 兼容。 direct Content的控制方法: true意味著Content直接顯示; false 意味著content 被包含。 false 是默認(rèn)值 role 如果用戶是指定的角色,那么這個(gè)標(biāo)記才會起作用,否 則,這個(gè)標(biāo)記會被忽略掉,并且不會寫出任何內(nèi)容。如果 add 標(biāo)簽在定義中被定義,則role不會起什么作用。. type content 的類型(type)。有效值 是"string", "page", "template", 或 "definition". 如果type 屬性沒有指定,則 content 是沒有類型的 (untyped)除非它從一個(gè)bean 類型中獲得。. value 增加的值??梢允荢tring 或者 Object. get 標(biāo)簽 get 標(biāo)簽是從 tile 文中獲得內(nèi)容。并且把它插入到頁面中。 屬性名 描述 flush true 或者 false. 如果true, 當(dāng)前頁會在tile insertion.前輸出流. ignore 如果這個(gè)屬性值被設(shè)置為 true 并且屬性被指定的名字不存在, 只會簡單的返回一個(gè)什么都沒有的結(jié)果。默認(rèn)值是false, 它可以引 起一個(gè)runtime exception 的拋出。 name 從 tile 范圍內(nèi)得到的內(nèi)容的名稱。這個(gè)屬性是要求的。 role 如果用戶是指定的角色,那么這個(gè)標(biāo)記才會起作用,否則,這個(gè)標(biāo) 記會被忽略掉,并且不會寫出任何內(nèi)容。 getAsString 標(biāo)簽 getAsString標(biāo)記負(fù)責(zé)查找tile屬性指定的屬性值,并作為字符串傳給當(dāng)前的JspWriter對象,一般使用toString()方法進(jìn)行轉(zhuǎn)換。如果不存在,將會拋出一個(gè)JSPException異常。表14-8列出了這個(gè)標(biāo)記的屬性: 屬性名 描述 ignore 如果這個(gè)屬性值被設(shè)置為 true 并且屬性被指定的名字不存在,只 會簡單的返回一個(gè)什么都沒有的結(jié)果。默認(rèn)值是false, 它可以引起 一個(gè)runtime exception 的拋出。 name 屬性的名稱(name). 這個(gè)屬性是要求的 role 如果用戶是指定的角色,那么這個(gè)標(biāo)記才會起作用,否則,這個(gè)標(biāo) 記會被忽略掉,并且不會寫出任何內(nèi)容。 useAttribute標(biāo)記 useAttribute 標(biāo)記在指定的范圍內(nèi)使用tile的屬性值聲明了一個(gè)Java 變量和一個(gè)屬性。這個(gè)變量和屬性由id指定一個(gè)名字,如果沒有指定,則是original name 。 屬性名 描述 classname 聲明變量的類名 id 屬性和變量所聲明的名稱 ignore 如果這個(gè)屬性值被設(shè)置為 true 并且屬性被指定的名字不存 在,只會簡單的返回一個(gè)什么都沒有的結(jié)果。默認(rèn)值是 false, 它可以引起一個(gè)runtime exception 的拋出。 name 屬性的名稱(name). 這個(gè)屬性是要求的 scope 聲明屬性的Scope.默認(rèn)是"page". importAttribute 標(biāo)記從tile 中插入一個(gè)屬性到被請求的作用域。name 和 scope 屬性是可選的。如果沒有指定,所有的屬性將引入到page作用域 中. 一旦引入,這個(gè)屬性可以像其他在JSP中的BEAN一樣使用。 Table 14-10 列出了 importAttribute 標(biāo)簽的屬性 屬性名 描述 ignore 如果這個(gè)屬性值被設(shè)置為 true 并且屬性被指定的名字不存在,只 會簡單的返回一個(gè)什么都沒有的結(jié)果。默認(rèn)值是false, 它可以引起 一個(gè)runtime exception 的拋出。 name Tile的屬性名。如果沒有指定,則所有的屬性將被引入。 scope 被引入屬性的scope屬性,默認(rèn)值"page". initComponentDefinitions標(biāo)記 initComponentDefinitions標(biāo)記初始化定義工廠。 屬性名 描述 classname 如果指定,值為創(chuàng)建和初始化工廠屬性的類名。 file 定義文件名,此屬性是必需的 作者簡介: Chuck Cavaness:畢業(yè)于Georgia Tech,獲計(jì)算機(jī)工程與科學(xué)學(xué)位,在醫(yī)療,銀行和B2B領(lǐng)域創(chuàng)建了許多Java企業(yè)系統(tǒng),同時(shí)也是O‘Reilly的Programming Jakarta Struts 和 Jakarta Struts Pocket Reference兩本書的作者。 |
|