天天看點

Tapestry的介紹

      在Web應用架構中,MVC往往是實作Web應用前端分層的重要設計模式。由于Struts提供了優異的控制

  器,這使得它成為了事實上的Web架構标準。在Web MVC中,視圖層往往采用JSP和HTML技術,而模型層可

  用的技術比較多(比如EJB,JDO等等)。就技術而言,如果你用Struts來開發Web應用,Struts為你提供了

  優異的控制器。但就視圖層的支援就有點讓人不敢恭維,因為用Struts的标記庫設計出來的頁面,一般

  的美勞工員,無法美化(不要小看美化工作,使用者接觸一個軟體時,最先接觸的是界面)。

      而Tapestry讓我心動的地方就是:我開發的主要精力都集中在業務邏輯上,而不用考慮界面,并且

  軟體的界面工作可以交給美工。并且後期的軟體維護比較輕松,不用在面對煩人的“界面和業務邏輯混在一起的”

  JSP。

    Tapestry的開發哲學是使得開發者能夠以“對象、方法、屬性”思考Web應用,而不是傳統的“HTTP請求、

  HTTP響應、會話(SESSION)、屬性、參數、URL”。在使用Tapestry時隻要專注于對象、對象的方法和屬性。

  比如:使用者在使用由Tapestry開發的Web應用中,使用者的行為(比如:單擊URL連結、送出表單)将觸發對象

  屬性的變化,以及事件(對對象中方法的調用)的發生。而這些工作都是由Tapestry關注,開發者隻要借助

  Tapestry提供的API,而不用理會底層的調用過程。這對互動性極強的Web應用十分适合。

     另外開發者在使用Tapestry的過程中,不般不需要開發servlet,不用建構URL。一般情況下隻要使用

  Tapestry提供的現有元件,并配置相應的listener參數。通過listener參數指定的調用方法就可以通路後

  端系統。

     Tapestry開發的應用由Page組成,即Web頁面。Page由元件組成,而元件又是由更小的元件組成。

  對Tapestry而言,Page是特殊的元件,Page元件中不能再有Page元件。對于單個Page而言,各個元件的名字

  都不相同,通過元件的ID能唯一辨別元件。通過使用元件ID便形成了Tapestry元件對象模型。

     通常Tapestry應用是由若幹個頁面組成,每個頁面都是用Tapestry元件開發的。而且元件一般都存在

  已經定義好的參數類型,通過Web頁面能夠提供相應的參數值。請注意,這裡的參數類型同javaBean中的

  參數類型有所差別。對于javaBean而言,它的參數是單向的,即開發者隻能傳入值,而不能傳出參數。對于

  Tapestry來說,方法參數是雙向的,可以讀出,也可以寫入。

     在Web應用中,處理表單資料是最為基礎,重要的内容。在Tapestry應用中,當使用者送出表單時,處于

  表單中的元件會從HTTP查詢參數中獲得值,并把這些值轉換為合适的類型,然後更新對象的屬性。這個

  過程在Tapestry中稱為Rewind過程。當Tapestry将頁面傳給浏覽器時,稱之為Tapestry Render過程。

     Tapestry頁面上的參數是用OGNL語言來表達的。

     Tapestry中存在Engine、Visit、Global這幾個重要的概念。Global相當于JSP中的Application範圍。

     Visit是作為Engine的屬性而存在的,而Engine又是存儲在HttpSession中,是以Visit也是存儲在

 HttpSession中。

     Visit和Engine都是在Tapestry的.application檔案中配置的。比如:

     <application name="XCharge" engine-class="org.apache.tapestry.engine.BaseEngine">

        <description>add a description</description>

        <property name="org.apache.tapestry.visit-class" value="charge.Visit"/>

     </application>

繼續閱讀