T5默认的组件模板是从WEB-INF目录加载的,实际开发中,希望组件模板可以放在根目录,例如组件类目录package.components.layout.DefaultLayout,对应的模板为layout/DefaultLayout.tml。
T5的模板加载是通过PageTemplateLocator加载的,我们可以通过覆盖这个Service的实现来达到我们的目的,首先是实现类:
- import
static
java
.
lang
.
String
.
format
;
-
- import
java
.
util
.
Locale
;
-
- import
org
.
apache
.
tapestry
.
internal
.
InternalConstants
;
- import
org
.
apache
.
tapestry
.
internal
.
services
.
PageTemplateLocator
;
- import
org
.
apache
.
tapestry
.
ioc
.
Resource
;
- import
org
.
apache
.
tapestry
.
model
.
ComponentModel
;
-
- public
class
ContextRootTemplateLocator
implements
PageTemplateLocator
{
-
-
private
final
Resource
contextRoot
;
-
-
private
final
String
compomentPackage
;
-
-
private
final
String
pagePackage
;
-
-
public
ContextRootTemplateLocator
(
Resource
contextRoot
,
-
String
appRootPackage
)
{
-
this
.
contextRoot
=
contextRoot
;
-
this
.
compomentPackage
=
appRootPackage
+
"
.
"
- +
InternalConstants
.
COMPONENTS_SUBPACKAGE
;
-
this
.
pagePackage
=
appRootPackage
+
"
.
"
- +
InternalConstants
.
PAGES_SUBPACKAGE
;
-
-
}
-
-
public
Resource
findPageTemplateResource
(
ComponentModel
model
,
Locale
locale
)
{
-
-
String
className
=
model
.
getComponentClassName
()
;
-
if
(
className
.
contains
(
pagePackage
))
{
-
return
findPageTemplateResourceDelegate
(
className
,
locale
)
;
-
}
-
if
(
className
.
contains
(
compomentPackage
))
{
-
return
findComponentTemplateResourceDelegate
(
className
,
locale
)
;
-
}
-
return
null
;
-
}
-
-
private
Resource
findPageTemplateResourceDelegate
(
String
className
,
-
Locale
locale
)
{
-
String
logicalName
=
className
.
substring
(
pagePackage
.
length
()
+
1
)
- .
replace
(
'
.
'
,
'
/
'
)
;
-
return
locateFile
(
logicalName
,
locale
)
;
-
}
-
-
private
Resource
findComponentTemplateResourceDelegate
(
String
className
,
-
Locale
locale
)
{
-
String
logicalName
=
className
.
substring
(
compomentPackage
.
length
()
+
1
)
- .
replace
(
'
.
'
,
'
/
'
)
;
-
return
locateFile
(
logicalName
,
locale
)
;
-
}
-
-
private
Resource
locateFile
(
String
logicalName
,
Locale
locale
)
{
-
String
path
=
format
(
"
%s.%s
"
,
logicalName
,
-
InternalConstants
.
TEMPLATE_EXTENSION
)
;
-
return
contextRoot
.
forFile
(
path
)
.
forLocale
(
locale
)
;
-
}
-
- }
在module中设置覆盖掉默认的PageTemplateLocator实现
- public
PageTemplateLocator
buildContextRootTemplateLocator
(
- @
InjectService
(
"
ContextAssetFactory
"
)
AssetFactory
contextAssetFactory
,
- @
Inject
@
Symbol
(
InternalConstants
.
TAPESTRY_APP_PACKAGE_PARAM
)
String
appRootPackage
)
{
-
return
new
ContextRootTemplateLocator
(
contextAssetFactory
- .
getRootResource
()
,
appRootPackage
)
;
-
}
-
- @
SuppressWarnings
(
"
unchecked
"
)
-
public
static
void
contributeAlias
(
-
Configuration
<
AliasContribution
>
configuration
,
- @
InjectService
(
"
ContextRootTemplateLocator
"
)
PageTemplateLocator
contextRootTemplateLocator
)
{
-
configuration
.
add
(
AliasContribution
.
create
(
PageTemplateLocator
.
class
,
-
contextRootTemplateLocator
))
;
-
}
这样就可以在根目录下加载组件类的模板了。
转载请注明出处tapestry5.com。
分享到:
相关推荐
8. **tapestry-hibernate-NOTICE.txt, tapestry-hibernate-core-NOTICE.txt, tapestry-ioc-NOTICE.txt**:与对应的LICENSE文件类似,这些NOTICE文件列出了在Tapestry的这些特定模块中使用到的第三方组件和它们的版权...
Tapestry5和jQuery集成.使用jQuery以极少的兼容问题完全替换Prototype 和 Scriptaculous库 标签:tapestry5
在"tapestry-project-4.1.5"这个压缩包中,我们有机会深入探索 Tapestry 4.1.5 版本的特性和应用。 首先,让我们关注"Tapestry-libraries"这个文件夹。它包含了Tapestry 框架运行所需的各种库文件,这些库文件是...
`tapestry-jpa-5.3.7.jar`和`tapestry-hibernate-5.3.7.jar`则与持久层集成有关,它们支持JPA(Java Persistence API)和Hibernate ORM框架,使开发者能够轻松地在Tapestry应用中处理数据库操作。 总的来说,Apache...
2. **Tapestry Core**:`tapestry-core-5.3.8.jar`是Tapestry框架的核心库,包含了框架的基础组件、服务和API。它提供了页面、组件、事件处理、URL映射等功能,是构建Tapestry应用的基础。 3. **Plastic**:`...
总结起来,创建一个自定义的邮件组件在 Tapestry 5 中涉及编写组件类、模板文件和元数据配置,并将其集成到应用中。这个过程需要对 Tapestry 5 的组件模型有深入理解,包括生命周期、事件处理、依赖注入等概念。通过...
标题中的“tapestry-bin-5.0.14.zip”指的是Tapestry的最新版本5.0.14的二进制发行包,它包含了开发人员构建基于Tapestry应用所需的所有组件和库。 Tapestry 5.0.14的发布旨在提供更加稳定和高效的开发环境,为...
在本案例中,"tapestry-bin-5.0.18.zip" 是一个与 Tapestry 框架相关的压缩包,这可能是一个用于Web应用开发的工具集或库。Tapestry 是一个开源的Java Web应用程序框架,由Apache软件基金会维护,它允许开发者以组件...
这个“tapestry-4.0.zip”压缩包包含了Tapestry框架的4.0版本,这是一个相对较早的但非常稳定的基础,对于初学者来说是个很好的学习起点。在Tapestry 4.0中,我们可以探索许多关于Web应用开发的核心概念和技术。 ...
tapestry-spring-5.2.6.jar,java spring框架依赖,可以直接使用
要开始使用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框架的源代码,这对于开发者深入理解其工作原理和定制功能非常有价值。 1. **依赖注入(DI)**:Tapestry IOC的核心概念就是DI,它允许对象在...
同时,框架还支持元数据,可以在不改变组件源码的情况下,通过配置文件调整组件的行为,增强了灵活性。 五、依赖注入与类型安全 Tapestry 4.0.2 集成了依赖注入(Dependency Injection, DI)机制,使得对象间的依赖...
在Tapestry 4.02中封装Ext的GridPanel组件,意味着开发者将ExtJS的GridPanel功能集成到Tapestry应用中,使Tapestry应用能够利用GridPanel的强大功能。这个过程通常涉及到以下几个关键步骤: 1. **引入ExtJS库**:...
在压缩包"tapestry-monitoring-master"中,我们可以期待找到项目的源代码、文档和可能的构建脚本。源代码将展示如何与Tapestry5集成,并通过JMX提供监控数据。这通常包括配置文件、MBean的实现以及与Tapestry5交互的...
- **项目名称**:Tapestry-3-Getting Started - **项目目标**:开发一个基于Web的货币转换器应用。 - **技术栈**:Tapestry 3、Eclipse IDE、Apache Tomcat。 #### 二、开发环境搭建 ##### 1. Eclipse IDE安装 - **...
10. **性能优化**:Tapestry通过页面和组件缓存、延迟加载等技术提高应用程序的性能。 "详细的使用手册"可能包含了关于如何设置项目、创建组件、处理用户交互、部署应用等方面的指导,这对于初学者尤其有用。通过...
包含的`apache-tapestry-5.3.7-javadocs.zip`文件提供了完整的API文档,对于开发者来说,这是一个宝贵的资源,可以帮助理解框架的各个部分以及如何使用它们。`apache-tapestry-5.3.7-sources.zip`则包含了源代码,...