tapestry中的组件要比tapestry4的组件容易得多.不需要继承任何类.类是实体类,不再是虚类.不再需要任何XML配置文件.在T5中仅仅需要一点用注释配置说明,这些注释说明要放置在类中字段上方.
组件类,页面类,component mixin 类,都是用同样的方法创建的.没有什么很特殊的地方.
组件类基础:
在T5中
创建页面和组件类是非常简单的,轻松的.
有几点要求:
1,类必须是公共的.
2,类必须在正确的包中,要必须和前面配置文件中一致.
3,类中必须有一个公共的,无参数的构造函数.
下面就一个最基本的组件例子:
java 代码
-
- package org.example.myapp.components;
-
- import org.apache.tapestry.MarkupWriter;
- import org.apache.tapestry.annotations.BeginRender;
-
- public class HelloWorld
- {
- @BeginRender
- void renderMessage(MarkupWriter writer)
- {
- writer.write("Bonjour from HelloWorld component.");
- }
- }
这个组件仅仅是在页面上输出一个指定的信息.其中
@BeginRender 注释是组件生命周期注释中一个类型.
组件包:
组件类必须存放在指定的包中.这些包必须存放在应用程序根目录包(假如为root)下.
页面类 ,必须放在root.pages;
组件类 ,必须放在root.components
mixins,必须放在root.mixins.
子目录/子包
类不可能都直接放在这些包下(如pages,components,mixins等).类有可能存放在子包(子目录)中.那么子包名称成为页面或者组件类型名称的一部分.因此我们可能定义一个页面组件为com.example.myapp.pages.admin.CreateUser,他的逻辑页面名称(显示在URLS中名称)可能是admin/CreateUser.
Tapestry提供了一些简单的页面名称(或者组件类型,或者mixins类型)的优化工作.检查包名称是否则类的名称的前缀或者后缀,如果是则可以把这些前缀或者后缀去掉.例如有这样一个类:com.example.myapp.pages.user.EditUser,这个类可以有一个名称为user/Edit的页面.这个目的是为了让URL更短,更加自然.
页面与组件的区别:
页面和组件的区别是非常非常小的.仅仅是他们所在包名称不一样(页面:root.pages.PageName,组件:root.components.ComponentType);