Starting Struts2--Core Components(4)

          Posted on 2007-08-10 16:33 puras 閱讀(1303) 評論(0)  編輯  收藏 所屬分類: Struts2.0

          Results / View Technologies

          目前為止的所有例子,都是假定JSP為渲染視圖的技術(shù).盡管它可能是最普通的,但它決不是渲染結(jié)果的唯一方法.

          結(jié)果類型和視圖技術(shù)的使用緊密相聯(lián).在前面的章節(jié),我們看到如果"type"屬性無值或是值為"dispatcher",就會將使用JSPs來渲染.在Struts2應(yīng)用中,還有三種其他的技術(shù)可以替換JSPs:

          • Velocity Templates
          • Freemarker Templates
          • XSLT Transformations

          記住,你同樣可以從現(xiàn)有的視圖技術(shù)實(shí)現(xiàn)一種新的結(jié)果類型.那時你將獲得額外的可用結(jié)果.

          除了個別的語法不同,Freemarker和Velocity都與JSP非常相似.所有的action的屬性(通過getter方法)在模版中都是可用的,以及JSP標(biāo)簽庫和在標(biāo)簽庫內(nèi)使用OGNL.在actions配置中可以很容易的將JSP模版的名稱替換成Velocity或是Freemarker模版中的任何一個.這里演示了如果配置Freemarker結(jié)果來替代JSP被返回:

           

          1<action name="my" class="com.fdar.infoq.MyAction" >
          2        <result type="freemarker">view.ftl</result>
          3</action> 

           

          XSLT結(jié)果稍有不同.不僅是使用stylesheet名稱替換掉模版名稱,還有額外的參數(shù)將被用到."stylesheetLocation"參數(shù)提供了渲染XML所使用的stylesheet的名稱.如果沒有這個參數(shù),將返回給用戶沒有轉(zhuǎn)換的XML.exposedValue屬性提供action的屬性或是一個OGNL表達(dá)式暴露給XML.如果這個參數(shù)沒有指定,這個action本身將暴露給XML.

           

          1<result type="xslt">
          2    <param name="stylesheetLocation">render.xslt</param>
          3    <param name="exposedValue">model.address</param>
          4</result> 

           

          使用XSLT做為結(jié)果,"struts.properties"配置屬性同樣可用.名字為"struts.xslt.nocache"的屬性,決定stylesheet是否被緩存.在開發(fā)期間,考慮到更快的開發(fā)周期,你可能將想要移除一些緩存,然而,當(dāng)應(yīng)用發(fā)布到應(yīng)用環(huán)境,緩存stylesheet將提高渲染的性能.

          Tag Libraries

          標(biāo)簽庫通常用來定義為JSP一種專用的特征,來提供可復(fù)用性.Freemarker和Velocity有不同的概念;反之,他們?yōu)殇秩疽嫣峁┝艘环N模型或上下文,和開始渲染的模版所能訪問到的所有的那些對象.當(dāng)我們在Struts2中講到標(biāo)簽庫,我們討論的是提供與JSP標(biāo)答庫提供相同功能的對象,它們與所有的視圖技術(shù)相似-JSP,Velocity和Freemarker.

          在定義標(biāo)簽庫方面還有很多的形式,但最基本的功能是一樣的--提供對對象方法的訪問.邏輯的壓縮改善了可維護(hù)性,并且減少了復(fù)制和粘貼代碼的誘惑.

          JSP標(biāo)簽庫還有另外一個特征,在今天的WEB開發(fā)環(huán)境中看起來已經(jīng)是過時的了-直接在標(biāo)簽庫本身的Java代碼里寫顯示的文本.Strust2轉(zhuǎn)變了思想,為標(biāo)簽創(chuàng)建一個專有的MVC模式.邏輯在Java類內(nèi)提供,但被放到Freemarker模版中渲染(這是默認(rèn)的).整體的結(jié)構(gòu)如下:

          Starting Struts2 OnLine

          結(jié)構(gòu)的核心是對組件對句的設(shè)置.這個組件提供了每個標(biāo)簽最基本的表現(xiàn)形式,并提供一些必要的邏輯,以及管理的渲染的模版.每個不同的結(jié)果/視圖技術(shù),都提供了對組件的包裝.包裝器提供了對

          當(dāng)同F(xiàn)reemarker模版一起使用標(biāo)簽庫渲染的時候,還有一個額外的配置是必須的.一個額外的Servlet需要配置在"web.xml"文件中,這樣Freemarker可以在渲染時獲得它所需要的信息:

           

          1<servlet>
          2    <servlet-name>jspSupportServlet</serlet-name>
          3    <servlet-class>
          4        ….action2.views.JspSupportServlet.JspSupportServlet
          5    </servlet-class>
          6    <load-on-startup>10</load-on-startup>
          7</servlet> 

           

          每個組件同樣有模版與之關(guān)聯(lián).如果原始標(biāo)簽包含其他標(biāo)簽(例如form標(biāo)簽),將有一個開始模版和一個關(guān)閉模版.如果原始標(biāo)簽只包含它自己(如checkbox標(biāo)簽),將只有一個關(guān)閉模版.并提供了在文本和UI結(jié)果中的邏輯的分離,為標(biāo)簽使用模版還提供了另外一個好處-它允許開發(fā)者對相同的標(biāo)簽混合和匹配不同的模版,利用稱為"主題"的特性.

          這里有三種常用的主題:"simple", "xhtml"和"css_xhtml"."simple"主題提供不使用任何格式化的標(biāo)簽."xhtml"主題將進(jìn)行進(jìn)一步的格式化;對于HTML的form標(biāo)簽,這個主題使用HTML表格提供兩列的格式化.對于CSS的純化論者,有一種"css_xhtml"主題.與"xhtml"主題相似,這種主題同樣提供了格式化;不過是使用CSS DIV替換了HTML表格.附加的格式化提供給開發(fā)者,對HTML沒有增加額外的混亂.

          "xhtml"和"css_xhtml"主題是非常好的例子,程序員可以自己實(shí)現(xiàn)個主題,為HTML提供特定的格式化.主題可以被混合或匹配到相同的頁面,并且當(dāng)前標(biāo)簽的主題使用"theme"屬性定義.如果你一直使用一個主題,它可以通過"struts.properties"配置文件的"struts.ui.theme"屬性配置默認(rèn)使用.

          主題提供為所有的標(biāo)簽種類(控制標(biāo)簽,數(shù)據(jù)標(biāo)簽,Form標(biāo)簽和非Form的UI標(biāo)簽);然而,創(chuàng)建新的主題只能作用于可視的Form標(biāo)簽.


          上一章:Starting Struts2--Core Components(3)

          下一章:Starting Struts2--Architectural Goals


          PS:第三章終于結(jié)束了......

          posts - 47, comments - 124, trackbacks - 0, articles - 0

          Copyright © puras

          主站蜘蛛池模板: 韶山市| 淮安市| 翼城县| 读书| 新安县| 扎鲁特旗| 湖南省| 长宁区| 金堂县| 独山县| 五华县| 诏安县| 崇文区| 抚远县| 平顺县| 凌源市| 开化县| 平罗县| 涿州市| 泰顺县| 盐亭县| 瑞丽市| 青冈县| 安乡县| 会理县| 会宁县| 葫芦岛市| 华安县| 诏安县| 静安区| 周宁县| 长汀县| 大同市| 济阳县| 平罗县| 昭觉县| 集贤县| 凉山| 许昌县| 吉木萨尔县| 岫岩|