Starting Struts2--Core Components(4)

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

          Results / View Technologies

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

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

          • Velocity Templates
          • Freemarker Templates
          • XSLT Transformations

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

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

           

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

           

          XSLT結(jié)果稍有不同.不僅是使用stylesheet名稱(chēng)替換掉模版名稱(chēng),還有額外的參數(shù)將被用到."stylesheetLocation"參數(shù)提供了渲染XML所使用的stylesheet的名稱(chēng).如果沒(méi)有這個(gè)參數(shù),將返回給用戶(hù)沒(méi)有轉(zhuǎn)換的XML.exposedValue屬性提供action的屬性或是一個(gè)OGNL表達(dá)式暴露給XML.如果這個(gè)參數(shù)沒(méi)有指定,這個(gè)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是否被緩存.在開(kāi)發(fā)期間,考慮到更快的開(kāi)發(fā)周期,你可能將想要移除一些緩存,然而,當(dāng)應(yīng)用發(fā)布到應(yīng)用環(huán)境,緩存stylesheet將提高渲染的性能.

          Tag Libraries

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

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

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

          Starting Struts2 OnLine

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

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

           

          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> 

           

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

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

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

          主題提供為所有的標(biāo)簽種類(lèi)(控制標(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

          主站蜘蛛池模板: 罗山县| 南通市| 宝清县| 达州市| 垦利县| 萨嘎县| 酉阳| 奉节县| 上杭县| 客服| 遵义市| 彭山县| 潢川县| 湛江市| 衡阳县| 霍林郭勒市| 丰宁| 南昌县| 云阳县| 抚松县| 兴文县| 顺义区| 临桂县| 班玛县| 务川| 宝清县| 通榆县| 云霄县| 色达县| 德保县| 夹江县| 灵山县| 海口市| 临高县| 安义县| 舒兰市| 皋兰县| 肇庆市| 乌拉特前旗| 天镇县| 岳池县|