chenruhan

          Java萬歲

           

          Jakarta Struts 編程:使用Tiles框架

          這是Jakarta Struts編程一書中使用 Tiles框架系列的第三部分,主要闡述了如何使用標記庫(包括:insert, definition, put, putList, add, get, getAsString, useAttribute, importAttribute, and initComponentDefinitions).

          Tiles標記庫(The Tiles Tag Library)
          這一部分介紹Tiles 框架使用的JSP自定義標記。表14-1列出了框架可用的標記 。這些標記與其他一些基于模板的框架所提供的標記是非常相似的,但是Tiles框架中蘊含著更豐富的功能。
          表 14-1: Tiles框架標記庫中的標記

          標記名(Tag name)                      描述(Description)
          Add          增加一個元素到環境列表中。
          definition          創建一個Tiles組件定義。
          Get          從請求作用域中得到內容(content),這個內容是put 標
                           記所置入的。
          GetAsString       傳遞tile/component/template屬性指定的值到當前的
                           JspWriter中。 
          importAttribute  引入一個Tiles屬性到指定的上下文(context)中;
          initComponentDefinitions   初始化一個Tiles定義工廠。
          Insert            插入一個Tiles組件。
          Put            設置一個屬性到一個Tiles上下文中。
          PutList             聲明一個列表,這個列表作為一個屬性被傳遞。
          useAttribute        在頁面中使用一個屬性值。

          insert 標記
                insert 標記是負責頁面中插入內容。在一個Tiles布局中, insert標記使用屬性值指定的內容。在非Tile布局中,insert標記是用來獲得一個框架(layout)并且使用put 標記把內容傳遞給布局中。 
          表14-2列出insert 標記的屬性:
          表 14-2:insert 標記的屬性

          屬性名(Attribute name)           描述(Description)
          attribute           當前Tiles /組件上下文的屬性名稱,這個屬性值是由
                           name 屬性來傳遞的。
          beanName        Bean 的名稱作為值來使用.Bean是從指定的內容中獲得。
                           如果有的話,Bean可以從指定的上下文中獲得。否則就得
                           使用pageContext.findAttribute( ) 方法獲得。 如果
                           beanProperty 屬性已經指定,也可以從相應Bean屬性中
                           獲得這個值 。
                           如果,這個Bean(或Bean的屬性值)是某個屬性類
                           (Direct, Instance,等等)的實例, 那么插入過程要依照類
                           的類型而定。另外,調用Bean 的toString( ) 方法,并返
                           回值為String,并傳給name屬性。 
          beanProperty    Bean 屬性(property)的名字,如果指定,那么這個值從
                           Bean的屬性(property)中獲得.
          beanScope        Bean的作用范圍,如果沒有指定, 
                           pageContext.findAttribute( ) 方法可以使用。Bean的
                           范圍可以是任何的JSP, 組件(component),或者模板
                           (template)。在后兩者情況(組件,模板),bean 可
                           以在 Tiles (tile)/組件(component)/模板(template)
                           內容中
          component        一個描述tile 或者 模板(template)URI的字符串. 模板
                           (template),頁(page)和 組件(component)屬
                           性必須有嚴格相同的行為
          controllerUrl      在頁被插入前,控制器(controller)的直接URI 。 這個URI
                                   通常用來指示一個struct action. 這個控制器(action) 是用
                          來為inserted tile 準備數據的。
                          只能有 一個controllerUrl 或 controllerClass 
          controllerClass 頁面(page)被插入前,直接調用的一種控制(control)類
                          的類型。這個類是用來為inserted tile 準備數據的。
                          只能有 一個controllerUrl 或 controllerClass 。這個類
                          實現或擴展下列類之一:
                                  org.apache.struts.tiles.Controller, 
                                  org.apache.struts.tiles.ControllerSupport,
                                  或org.apache.struts.action.Action.
          definition         Insert定義的名稱。定義在一個集中的文件中被定義。現
                          在,僅僅一個工廠(factory)的定義可以用這個屬性插入。
                          插入一個用definition定義的定義,用beanName="".
          flush         true 或者 false. 如果true, 當前頁會在tile insertion.前
                          輸出流
          ignore         如果這個屬性設置為 true 并且name所指定的屬性不存在的
                          話,僅僅會返回一個什么都沒有寫得結果。初始值設置為
                          false,可以拋出一個 runtime exception 
          name        一個要被插入得實體(entity)的名字。查找按照下面的順
                         序 definition, attribute, 然后 page.
          page        一個表示tile 或者 template 的URI字符串。template,
                                 page, 和 component 屬性要嚴格的有同樣的行為
          role        如果用戶是指定的角色,那么這個標記才會起作用,否則,
                         這個標記會被忽略掉,并且不會寫出任何內容。
          template       一個表示tile 或者 template 的URI字符串。template,
                                page, 和 component 屬性要嚴格的有同樣的行為

          definition 標簽
              definition 標簽用bean的定義方法創建一個tile (template),這個新創建的bean在requested scope用一個id來標識。definition 標簽的有些語法和insert 一樣。新的定義可以擴展在definition factory (XML file)中已經描述過的定義,并且可以重載以前定義的參數。
          Table 14-3 列出了definition 標簽支持的屬性

          屬性名     描述
          extends 可以用來擴展的父定義,這個父定義在definitions factory被
                     定義了。
          id 定義bean的名稱,這個屬性是必需的
          page 要插入template/component 的URL 。和template.一樣。
          role 在插入一個定義前,進行檢查role.如果當前用戶并沒有定義這個
                     role,那么這個定義將不會被插入。再插入的時候進行檢查,
                     而不是在定義的時候。
          scope 在新定義bean 的時候被創建。如果沒有指定,
                     默認值是page scope.
          template tile/component/template (a JSP page)的URL  .
          下面的片斷展示了如何在JSP中使用definition標簽。

          <tiles:definition 
            id="storefront.default" 
            page="/layouts/storefrontDefaultLayout.jsp" 
            scope="request">
              <tiles:put name="header" value="/common/header.jsp" />
              <tiles:put name="menubar" value="/common/menubar.jsp" />
              <tiles:put name="copyright" value="/common/copyright.jsp" />  
          </tiles:definition>


          一個完整的例子將在這章后面的"Declaring Definitions in a JSP Page" 中展示

          put 標簽
              put 標簽用來傳遞屬性到一個tile 組件。 這個標簽只能在insert 或 definition 標簽內部使用。 put標簽的值被value 屬性或者標簽體指定。也經常被指定值得類型。 
          string: 文如其名
          page 或template: 內容包含指定的URL. 名字通常以URL用.
          definition: 內容從指定(from factory)的定義獲得. 名字以已定義的名字使用。如果type 已經使用, 他就會被get 或 insert 標簽插入到tile. 如果type 屬性沒有被指定,則內容是不確定的untyped,除非它來自一個typed bean.
          提示: Setting direct="true" 與setting type="string" 是相同的.
          Table 14-4 列出了put 標簽的屬性。

          屬性名         描述
          beanName        Bean 的名稱,和值(value)的使用方法一樣.Bean是從
                           特殊的內容中獲得。如果有的話,還可以用
                           pageContext.findAttribute( ) 方法獲得。 如果
                           beanProperty 屬性已經指定,可以從相應Bean屬性中獲
                           得這個值 。
          beanProperty    Bean 屬性(property)的名字,如果指定,那么這個值從
                           Bean的屬性(property)中獲得.
          beanScope        Bean的作用范圍,如果沒有指定,
                           pageContext.findAttribute( ) 方法可以使用。Bean的
                           范圍可以是任何的JSP, 組件(component),或者模板
                          (template)。在后兩者情況(組件,模板),bean 可以
                          在 Tiles (tile)/組件(component)/模板(template) 內
                          容中
          content         Content 在tile 范圍內。 屬性相當于value 屬性,增加是
                          為了于JSP template tags 兼容。.
          Direct         Content的控制方法: true意味著Content直接顯示; false
                                  意味著content 被包含。 false 是默認值。也是指定
                          content 類型的一種方法。如果 direct="true", content
                                  是 "string"; 如果 direct="false", content 是 "page".
                                  增加這個屬性是為了于JSP template tags 兼容。.
          Name         屬性的名稱(name).
          Role         如果用戶是指定的角色,那么這個標記才會起作用,否則,
                          這個標記會被忽略掉,并且不會寫出任何內容。
          Type         content 的類型(type)。有效值
                          是"string", "page", "template", 或 "definition". 
          value         屬性的值,可以是String 或者 Object. 值是直接被分配
                          的。 (value="avalue") 或者從一個bean 獲得。一個 
                          value, content, 或 beanName 一定存在。
          putList 標簽
               putList 標簽建立一個list,在 tile 中以值傳遞。 list 元素用add 標簽增加。這個標簽只能在insert 或definition 標簽中使用。
          Table 14-5 列出putList 標簽的屬性。

          屬性名 描述
          Name List 的名稱。這個屬性是被要求的。

          add 標簽
               add 標簽是增加一個element 到周圍的list 中。這個標簽只能在putList 標簽中使用。這個值可以直接被分配。 (value="avalue") 或者從一個bean中獲得。 一個value 或beanName 必須被指定。
          Table 14-6 列出 add 標簽的屬性。

          屬性名            描述
          beanName              Bean 的名稱,和值(value)的使用方法一樣.Bean
                                         是從特殊的內容中獲得。如果有的話,還可以用
                               pageContext.findAttribute( ) 方法獲得。 如果 
                               beanProperty 屬性已經指定,可以從相應Bean屬性
                               中獲得這個值 。
          beanProperty Bean 屬性(property)的名字,如果指定,那么這
                               個值從Bean的屬性(property)中獲得.
          beanScope Bean的作用范圍,如果沒有指定, 
                               pageContext.findAttribute( ) 方法可以使用。
                               Bean的范圍可以是任何的JSP, 組件
                               (component),或者模板(template)。在后兩者
                               情況(組件,模板),bean 可以在 Tiles (tile)/組件
                               (component)/模板(template) 內容中content
                                         和value 屬性相同。增加這個屬性是為了于JSP 
                                         template tags 兼容。
          direct                Content的控制方法: true意味著Content直接顯示;
                                        false 意味著content 被包含。 false 是默認值
          role               如果用戶是指定的角色,那么這個標記才會起作用,否
                              則,這個標記會被忽略掉,并且不會寫出任何內容。如果
                              add 標簽在定義中被定義,則role不會起什么作用。.
          type               content 的類型(type)。有效值
                              是"string", "page", "template", 或 "definition".
                                        如果type 屬性沒有指定,則 content 是沒有類型的
                              (untyped)除非它從一個bean 類型中獲得。.
          value               增加的值。可以是String 或者 Object.

          get 標簽
                get 標簽是從 tile 文中獲得內容。并且把它插入到頁面中。
          Table 14-7 列出get 標簽的屬性。

          屬性名 描述
          flush true 或者 false. 如果true, 當前頁會在tile insertion.前輸出流.
          ignore 如果這個屬性值被設置為 true 并且屬性被指定的名字不存在,
                     只會簡單的返回一個什么都沒有的結果。默認值是false, 它可以引
                     起一個runtime exception 的拋出。
          name 從 tile 范圍內得到的內容的名稱。這個屬性是要求的。
          role 如果用戶是指定的角色,那么這個標記才會起作用,否則,這個標
                     記會被忽略掉,并且不會寫出任何內容。

          getAsString 標簽
               getAsString標記負責查找tile屬性指定的屬性值,并作為字符串傳給當前的JspWriter對象,一般使用toString()方法進行轉換。如果不存在,將會拋出一個JSPException異常。表14-8列出了這個標記的屬性:
          Table 14-8: getAsString標記屬性

          屬性名 描述
          ignore 如果這個屬性值被設置為 true 并且屬性被指定的名字不存在,只
                     會簡單的返回一個什么都沒有的結果。默認值是false, 它可以引起
                     一個runtime exception 的拋出。
          name 屬性的名稱(name). 這個屬性是要求的
          role 如果用戶是指定的角色,那么這個標記才會起作用,否則,這個標
                    記會被忽略掉,并且不會寫出任何內容。

          useAttribute標記
              useAttribute 標記在指定的范圍內使用tile的屬性值聲明了一個Java 變量和一個屬性。這個變量和屬性由id指定一個名字,如果沒有指定,則是original name 。
           
          Table 14-9 列出了useAttribute tag的屬性。

          屬性名      描述
          classname       聲明變量的類名
          id         屬性和變量所聲明的名稱
          ignore         如果這個屬性值被設置為 true 并且屬性被指定的名字不存
                          在,只會簡單的返回一個什么都沒有的結果。默認值是
                          false, 它可以引起一個runtime exception 的拋出。
          name         屬性的名稱(name). 這個屬性是要求的
          scope         聲明屬性的Scope.默認是"page".
          importAttribute標記

              importAttribute 標記從tile 中插入一個屬性到被請求的作用域。name 和 scope 屬性是可選的。如果沒有指定,所有的屬性將引入到page作用域 中. 一旦引入,這個屬性可以像其他在JSP中的BEAN一樣使用。
          Table 14-10 列出了 importAttribute 標簽的屬性
          Table 14-10: importAttribute標記屬性 

          屬性名 描述
          ignore 如果這個屬性值被設置為 true 并且屬性被指定的名字不存在,只
                     會簡單的返回一個什么都沒有的結果。默認值是false, 它可以引起
                     一個runtime exception 的拋出。
          name Tile的屬性名。如果沒有指定,則所有的屬性將被引入。
          scope 被引入屬性的scope屬性,默認值"page".
          initComponentDefinitions標記
                initComponentDefinitions標記初始化定義工廠。
          Table 14-11: initComponentDefinitions標記的屬性


          屬性名    描述
          classname    如果指定,值為創建和初始化工廠屬性的類名。
          file      定義文件名,此屬性是必需的

           

          posted on 2006-03-15 17:03 chenruhan 閱讀(243) 評論(0)  編輯  收藏 所屬分類: Java技術


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案(1)

          文章分類(2)

          文章檔案(2)

          相冊

          搜索

          最新評論

          主站蜘蛛池模板: 繁峙县| 旬邑县| 晋中市| 衢州市| 徐州市| 成武县| 五大连池市| 凯里市| 贞丰县| 保山市| 西昌市| 西吉县| 丹棱县| 广州市| 清新县| 儋州市| 万安县| 方山县| 西藏| 凤山县| 明水县| 怀来县| 南溪县| 宿松县| 波密县| 石棉县| 嘉善县| 泾阳县| 宁海县| 六枝特区| 呼玛县| 洪江市| 巫山县| 安国市| 库伦旗| 尤溪县| 台州市| 鹤峰县| 呈贡县| 天峨县| 札达县|