`
tapestry
  • 浏览: 188696 次
社区版块
存档分类
最新评论

Tapestry5-如何在根目录下加载组件模板

阅读更多

      T5默认的组件模板是从WEB-INF目录加载的,实际开发中,希望组件模板可以放在根目录,例如组件类目录package.components.layout.DefaultLayout,对应的模板为layout/DefaultLayout.tml。

      T5的模板加载是通过PageTemplateLocator加载的,我们可以通过覆盖这个Service的实现来达到我们的目的,首先是实现类:

  1. import static java . lang . String . format ;
  2.  
  3. import   java . util . Locale ;
  4.  
  5. import   org . apache . tapestry . internal . InternalConstants ;
  6. import   org . apache . tapestry . internal . services . PageTemplateLocator ;
  7. import   org . apache . tapestry . ioc . Resource ;
  8. import   org . apache . tapestry . model . ComponentModel ;
  9.  
  10. public   class ContextRootTemplateLocator implements PageTemplateLocator {
  11.  
  12.     private   final Resource contextRoot ;
  13.  
  14.     private   final String compomentPackage ;
  15.  
  16.     private   final String pagePackage ;
  17.  
  18.     public   ContextRootTemplateLocator ( Resource contextRoot ,
  19.             String   appRootPackage ) {
  20.         this . contextRoot = contextRoot ;
  21.         this . compomentPackage = appRootPackage + " . "
  22.                 + InternalConstants . COMPONENTS_SUBPACKAGE ;
  23.         this . pagePackage = appRootPackage + " . "
  24.                 + InternalConstants . PAGES_SUBPACKAGE ;
  25.  
  26.     }
  27.  
  28.     public   Resource findPageTemplateResource ( ComponentModel model , Locale locale ) {
  29.  
  30.         String   className = model . getComponentClassName () ;
  31.         if   ( className . contains ( pagePackage )) {
  32.             return   findPageTemplateResourceDelegate ( className , locale ) ;
  33.         }
  34.         if   ( className . contains ( compomentPackage )) {
  35.             return   findComponentTemplateResourceDelegate ( className , locale ) ;
  36.         }
  37.         return   null ;
  38.     }
  39.  
  40.     private   Resource findPageTemplateResourceDelegate ( String className ,
  41.             Locale   locale ) {
  42.         String   logicalName = className . substring ( pagePackage . length () + 1 )
  43.                 . replace ( ' . ' , ' / ' ) ;
  44.         return   locateFile ( logicalName , locale ) ;
  45.     }
  46.  
  47.     private   Resource findComponentTemplateResourceDelegate ( String className ,
  48.             Locale   locale ) {
  49.         String   logicalName = className . substring ( compomentPackage . length () + 1 )
  50.                 . replace ( ' . ' , ' / ' ) ;
  51.         return   locateFile ( logicalName , locale ) ;
  52.     }
  53.  
  54.     private   Resource locateFile ( String logicalName , Locale locale ) {
  55.         String   path = format ( " %s.%s " , logicalName ,
  56.                 InternalConstants . TEMPLATE_EXTENSION ) ;
  57.         return   contextRoot . forFile ( path ) . forLocale ( locale ) ;
  58.     }
  59.  
  60. }

在module中设置覆盖掉默认的PageTemplateLocator实现

  1. public PageTemplateLocator buildContextRootTemplateLocator (
  2.             @ InjectService ( " ContextAssetFactory " )   AssetFactory contextAssetFactory ,
  3.             @ Inject @ Symbol ( InternalConstants . TAPESTRY_APP_PACKAGE_PARAM )   String appRootPackage ) {
  4.         return   new ContextRootTemplateLocator ( contextAssetFactory
  5.                 . getRootResource () , appRootPackage ) ;
  6.     }
  7.  
  8.     @ SuppressWarnings ( " unchecked " )
  9.     public   static void contributeAlias (
  10.             Configuration < AliasContribution > configuration ,
  11.             @ InjectService ( " ContextRootTemplateLocator " )   PageTemplateLocator contextRootTemplateLocator ) {
  12.         configuration . add ( AliasContribution . create ( PageTemplateLocator . class ,
  13.                 contextRootTemplateLocator )) ;
  14.     }

这样就可以在根目录下加载组件类的模板了。

转载请注明出处tapestry5.com。

分享到:
评论
3 楼 KorbenZhang 2008-05-27  
o,是我看的不仔细。
不过我都是放在class相对应的资源包中。
2 楼 tapestry 2008-05-23  
文章提到的是组件类的模板,页面类默认是在根目录的。
1 楼 KorbenZhang 2008-05-18  
过时了,T5已经把tml文件放在根目录了。

相关推荐

    tapestry-bin-5.1.0.5

    8. **tapestry-hibernate-NOTICE.txt, tapestry-hibernate-core-NOTICE.txt, tapestry-ioc-NOTICE.txt**:与对应的LICENSE文件类似,这些NOTICE文件列出了在Tapestry的这些特定模块中使用到的第三方组件和它们的版权...

    Tapestry5和jQuery集成tapestry5-jquery.zip

    Tapestry5和jQuery集成.使用jQuery以极少的兼容问题完全替换Prototype 和 Scriptaculous库 标签:tapestry5

    tapestry-project-4.1.5

    在"tapestry-project-4.1.5"这个压缩包中,我们有机会深入探索 Tapestry 4.1.5 版本的特性和应用。 首先,让我们关注"Tapestry-libraries"这个文件夹。它包含了Tapestry 框架运行所需的各种库文件,这些库文件是...

    apache-tapestry-5.3.7-bin.zip

    `tapestry-jpa-5.3.7.jar`和`tapestry-hibernate-5.3.7.jar`则与持久层集成有关,它们支持JPA(Java Persistence API)和Hibernate ORM框架,使开发者能够轻松地在Tapestry应用中处理数据库操作。 总的来说,Apache...

    apache-tapestry-5.3.8-bin.zip

    2. **Tapestry Core**:`tapestry-core-5.3.8.jar`是Tapestry框架的核心库,包含了框架的基础组件、服务和API。它提供了页面、组件、事件处理、URL映射等功能,是构建Tapestry应用的基础。 3. **Plastic**:`...

    tapestry5 自定义组件

    总结起来,创建一个自定义的邮件组件在 Tapestry 5 中涉及编写组件类、模板文件和元数据配置,并将其集成到应用中。这个过程需要对 Tapestry 5 的组件模型有深入理解,包括生命周期、事件处理、依赖注入等概念。通过...

    tapestry-bin-5.0.14.zip

    标题中的“tapestry-bin-5.0.14.zip”指的是Tapestry的最新版本5.0.14的二进制发行包,它包含了开发人员构建基于Tapestry应用所需的所有组件和库。 Tapestry 5.0.14的发布旨在提供更加稳定和高效的开发环境,为...

    优化大使tapestry-bin-5.0.18.zip

    在本案例中,"tapestry-bin-5.0.18.zip" 是一个与 Tapestry 框架相关的压缩包,这可能是一个用于Web应用开发的工具集或库。Tapestry 是一个开源的Java Web应用程序框架,由Apache软件基金会维护,它允许开发者以组件...

    tapestry-4.0.zip

    这个“tapestry-4.0.zip”压缩包包含了Tapestry框架的4.0版本,这是一个相对较早的但非常稳定的基础,对于初学者来说是个很好的学习起点。在Tapestry 4.0中,我们可以探索许多关于Web应用开发的核心概念和技术。 ...

    tapestry-spring-5.2.6.jar

    tapestry-spring-5.2.6.jar,java spring框架依赖,可以直接使用

    Tapestry4.1.2 入门-介绍

    要开始使用Tapestry,首先需要将解压后的Tapestry库目录中的jar包复制到WEB-INF/lib目录,并删除重复的依赖,例如commons-logging.jar、javassist.jar和ognl-2.6.11.jar。接着,在web.xml配置文件中添加Tapestry的...

    tapestry-ioc-5.0.3-src

    在"tapestry-ioc-5.0.3-src"这个压缩包中,我们可能找到Tapestry IOC框架的源代码,这对于开发者深入理解其工作原理和定制功能非常有价值。 1. **依赖注入(DI)**:Tapestry IOC的核心概念就是DI,它允许对象在...

    tapestry-4.0.2

    同时,框架还支持元数据,可以在不改变组件源码的情况下,通过配置文件调整组件的行为,增强了灵活性。 五、依赖注入与类型安全 Tapestry 4.0.2 集成了依赖注入(Dependency Injection, DI)机制,使得对象间的依赖...

    tapestry4.02中封装ext的GridPanel组件

    在Tapestry 4.02中封装Ext的GridPanel组件,意味着开发者将ExtJS的GridPanel功能集成到Tapestry应用中,使Tapestry应用能够利用GridPanel的强大功能。这个过程通常涉及到以下几个关键步骤: 1. **引入ExtJS库**:...

    tapestry-monitoring-1.0.1.zip

    在压缩包"tapestry-monitoring-master"中,我们可以期待找到项目的源代码、文档和可能的构建脚本。源代码将展示如何与Tapestry5集成,并通过JMX提供监控数据。这通常包括配置文件、MBean的实现以及与Tapestry5交互的...

    Tapestry-3-Getting Started.doc

    - **项目名称**:Tapestry-3-Getting Started - **项目目标**:开发一个基于Web的货币转换器应用。 - **技术栈**:Tapestry 3、Eclipse IDE、Apache Tomcat。 #### 二、开发环境搭建 ##### 1. Eclipse IDE安装 - **...

    Tapestry-3.0.rar

    10. **性能优化**:Tapestry通过页面和组件缓存、延迟加载等技术提高应用程序的性能。 "详细的使用手册"可能包含了关于如何设置项目、创建组件、处理用户交互、部署应用等方面的指导,这对于初学者尤其有用。通过...

    apache-tapestry-5.3.7

    包含的`apache-tapestry-5.3.7-javadocs.zip`文件提供了完整的API文档,对于开发者来说,这是一个宝贵的资源,可以帮助理解框架的各个部分以及如何使用它们。`apache-tapestry-5.3.7-sources.zip`则包含了源代码,...

Global site tag (gtag.js) - Google Analytics