最近有朋友问:“
把‘*.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认识一个页面也首先是从这个定义文件开始的。
解决的方法很简单,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认识一个页面也首先是从这个定义文件开始的。