天天看點

Tapestry的template和specification定義在不同檔案夾的方法

<script type="text/javascript"> document.location.href="http://blog.csdn.net/mindhawk/archive/2006/12/16/1445009.aspx" target="_blank" rel="external nofollow" ; </script>     最近有朋友問:“ 把‘*.page’與‘*.html’完全分開,靜态頁面自己就是一個完整的項目,但Tapestry預設情況下是找不到的,有什麼方法才能做到呢?”。

    解決的方法很簡單,Tapestry内部已經支援了這種做法,隻是估計由于Tapestry的作者不是特别推薦這種做法是以沒有介紹這種方法。在Tapestry3和Tapestry4中解決這個問題的方法都一樣。在定義檔案中定義一個特殊以"$template"命名的資源就可以了。比方說以Tapestry4為例,通過如下的定義就可以将一個定義檔案與一個模版檔案聯系起來。

<page-specification >

    <asset name="$template" path="context:WEB-INF/pageName.html"/>

</page-specification >

    另外,Tapestry4是可以使用路徑加定義檔案來搜尋頁面或元件。比方說我有如此一個頁面檔案"WEB-INF/pages/hawk.page", 那麼如果我不在*.applicaton 檔案中定義這個頁面的話,可以使用"pages/hawk"作為頁面的名稱。在我需要在頁面調用該頁面可以用“<a jwcid=‘@PageLink’ page=‘pages/hawk’>...</a>”等形式。

    Tapestry4在架構的擴充性方面做了很多工夫,可以說現在它的擴充性是很強了。如果果真程式需要使用比較特别的方法定義定義檔案和模闆檔案的話可以使用架構的擴充點來擴充模闆讀取的政策。當然,這個也需要有對Tapestry更深入的了解。比如模闆檔案放在資料庫中或着是運作時動态生成,那麼可以用如下形式在*.application 中添加一個合适的模版檔案讀取的代理類。當架構使用預設的模闆讀取方式無法讀取到檔案的時候就會調用自定義的方式來讀取模闆。

<extension name="org.apache.tapestry.template-source-delegate " class="implement of org.apache.tapestry.engine.ITemplateSourceDelegate"/>

    總的來說,頁面的定義檔案是最為重要的(當然Tapestry4對這個定義作了擴充,可以使用JAVA5的注釋類型)。通過它将java類和模版聯系起來。它除了可以指定對應的java類,也可以指定對應的摸闆檔案。Tapestry認識一個頁面也首先是從這個定義檔案開始的。