BlogJava 聯(lián)系 聚合 管理  

          Blog Stats

          文章分類

          隨筆檔案

          文章檔案

          Design Pattern

          J2EE

          J2EE FrameWork


          紅玫瑰

          JSF VS Tapestry 全面比較(二)

          對比1: 頁面開發(fā)(Page Development)

            一個web應(yīng)用實(shí)際上就是后端用java代碼獲取相應(yīng)數(shù)據(jù),并將數(shù)據(jù)傳遞給前端表現(xiàn)層代碼,然后最終返回給終端用戶。因此,在一個開發(fā)人員看來,當(dāng)他初次接觸JSF和Tapestry時(shí),最直接的感覺就是JSF的表現(xiàn)層是基于JSP的模板技術(shù),而Ta pestry的表現(xiàn)層模板基本就可以看作是一個HTML。

            JSF
            JSF采用JSP的技術(shù)作為其表現(xiàn)層技術(shù)。與標(biāo)準(zhǔn)兼容的JSF實(shí)現(xiàn)必須實(shí)現(xiàn)一個核心組件的JSP標(biāo)簽集。下面的代碼就是一個使用了JSF組件標(biāo)簽的Html代碼:

          代碼:
          <h:form>     
            <h:panelGrid columns="2" border = "1">
                  <h:outputText styleClass = "label" value="No"/>

                  <h:outputText value="#{holidaySession.currentHolidayBooking.holidayID}"/>
                  <h:outputText styleClass = "label" value="Date"/>
                  <h:outputText value="#{holidaySession.currentHolidayBooking.date}"/>

                  <h:outputText styleClass = "label" value="Number of days"/>
                  <h:outputText value="#{holidaySession.currentHolidayBooking.amount.value}"/>
                  <h:outputText styleClass = "label" value="Description"/>

                  <h:outputText value="#{holidaySession.currentHolidayBooking.description}"/>
          </h:panelGrid>
          <BR>
          <h:commandButton value="Back" action="#{holidaydetail_backing.home}" immediate = "true"/>

          </h:form>

            含有JSF標(biāo)簽的html頁面不能在標(biāo)準(zhǔn)瀏覽器中預(yù)覽。要想瀏覽,必須使用JSF設(shè)計(jì)工具或者直接部署到應(yīng)用中,在真實(shí)運(yùn)行環(huán)境中瀏覽。
            對于JSF技術(shù)來說,其表現(xiàn)層技術(shù)就是JSP,但是這不是唯一的解決方法。Hans Bergsten的文章介紹了可供選擇的其他的方法,讀者可閱讀該文章獲取詳細(xì)信息,
          Improving JSF by Dumping JSP。 Bergsten的文章中指出了混合JSF和JSP標(biāo)簽暴露出的一些問題。當(dāng)然,這些問題在JSF1.2和JSP2.1中會得到解決。

            Tapestry
            對于大多數(shù)的Tapestry應(yīng)用來說,Tapestry的表現(xiàn)層模板看起來就是一個簡單的規(guī)則的Html,只不過其中加入了一些Tapestry的屬性。下面是一段例子代碼:

          代碼:
          <span jwcid = "@Conditional" condition = "ognl:currentHolidayBooking">  
                  <p><strong>Holiday Details</strong></p>
                  <table>
                  <tr>
                          <td class = "label">No</td>
                          <td><span jwcid = "@Insert" 
                                  value = "ognl:currentHolidayBooking.holidayID">1</span>
                          </td>
                  </tr>
                  <tr>                      
                      <td class = "label">Start date</td>
                          <td><span jwcid = "@Insert" 
                                  value = "ognl:currentHolidayBooking.date" format = "ognl:dateFormat">1</span>
                          </td>
                  </tr>
                  <tr>                               
                      <td class = "label">Number of days</td>
                          <td><span jwcid = "@Insert" 
                                  value = "ognl:currentHolidayBooking.amount.value">1</span>
                          </td>
                  </tr> 
                  <tr>               
                      <td class = "label">Description</td>    
                          <td><span jwcid = "@Insert" 
                                  value = "ognl:currentHolidayBooking.description">1</span>
                          </td>
                  </tr>
                  </table>
          </span>

            大家可以嘗試把這段代碼放入一個Html的body標(biāo)簽當(dāng)中,你會發(fā)現(xiàn)瀏覽器可以正常的觀看它。
            上面的例子中,jwcid = "@componentName"屬性就是定義了一個Tapestry標(biāo)簽。
            Tapestry的模板不僅僅可以用HTML作為載體,它也支持其他的一些標(biāo)記語言,Tapestry標(biāo)簽是具有良好格式的標(biāo)簽,即必須成對出現(xiàn)。 Tapestry模板技術(shù)支持的標(biāo)記語言典型的就是HTML以及用于無線應(yīng)用的WML。其最大的一個特點(diǎn) 就是,可脫離Servlet容器,直接預(yù)覽。

            事實(shí)上JSF標(biāo)簽由于不是標(biāo)準(zhǔn)的html標(biāo)簽,使得它對于初學(xué)者來說,是難于使用的。而對于很多java程序員來說,他們喜歡編輯HTML代碼,至少是樂意編寫html代碼。

            JSF技術(shù)宣稱的一個技術(shù)優(yōu)點(diǎn)就是,可使用同一個模板編寫運(yùn)行在不同設(shè)備上的應(yīng)用,由此帶來很大的靈活性。然而,這樣做,由于要協(xié)調(diào)不同設(shè)備間的表現(xiàn)差異性,那么很可能同一個模板,將不能正好表現(xiàn)你的輸出。同時(shí),你不得不學(xué)習(xí)新的標(biāo)簽庫的使用方法,并且搞懂它們是怎樣映射到html的。隨著時(shí)間的推移,JSF標(biāo)簽的簡潔可幫助你很快的編寫表現(xiàn)層代碼,同時(shí)也降低了開發(fā)者對jsf設(shè)計(jì)工具的依賴。

            本文認(rèn)為,JSF的學(xué)習(xí)成本高于其技術(shù)優(yōu)點(diǎn)。在大多數(shù)情況下,我們并不需要編寫適應(yīng)于不同設(shè)備的應(yīng)用。盡管JSF設(shè)計(jì)工具提供了簡單的圖形化的方法來構(gòu)建和預(yù)覽JSF應(yīng)用,但是在一個開發(fā)中,頁面設(shè)計(jì)人員更多的是喜歡用流行的HTML設(shè)計(jì)工具來編寫和預(yù)覽頁面,這就發(fā)生了一個沖突,即只有將更多的頁面工作轉(zhuǎn)移到j(luò)ava程序員身上,因?yàn)橐粋€頁面設(shè)計(jì)人員通常情況下是不樂意去操作JSF設(shè)計(jì)工具的。

            JSF開發(fā)者一直在尋找一種解決這些問題的方法。JSF技術(shù)設(shè)計(jì)良好的擴(kuò)展體系,使得這成為可能,其中一個技術(shù)浮現(xiàn)出來,那就是表現(xiàn)層控制器。一個非常有前途的表現(xiàn)層控制器的實(shí)現(xiàn)就是Facelets,由java.net創(chuàng)建的開放源代碼項(xiàng)目。Facelets的靈感就來源于Tapestry的模板模型,這使得JSF不再依賴于JSP技術(shù)。Facelets允許開發(fā)者創(chuàng)建Tapestry風(fēng)格的標(biāo)簽,就像下面這段代碼一樣:

          代碼:
              

            在未來的一段時(shí)間內(nèi),F(xiàn)acelets將會被開發(fā)者所采用,或許會影響JSF未來的版本。

            
          和JSF比較,Tapestry在表現(xiàn)層方面基于HTML代碼,可被標(biāo)準(zhǔn)瀏覽器所瀏覽,這正是它在表現(xiàn)層上的優(yōu)勢所在。

          posted on 2005-11-09 16:56 vaga 閱讀(179) 評論(0)  編輯  收藏 所屬分類: J2EE學(xué)習(xí)筆記
          主站蜘蛛池模板: 高唐县| 金塔县| 贡山| 鹤壁市| 门头沟区| 屯门区| 渝北区| 清水河县| 垦利县| 石渠县| 安国市| 樟树市| 兴文县| 山丹县| 辽中县| 华安县| 富阳市| 凉城县| 句容市| 敖汉旗| 靖远县| 富平县| 广宁县| 奉贤区| 页游| 兴仁县| 惠州市| 万全县| 布拖县| 望江县| 富源县| 旌德县| 邛崃市| 内丘县| 比如县| 秦安县| 杭锦后旗| 托克逊县| 文成县| 泸州市| 瑞丽市|