Tapestry 5 组件类
【IT168 技术文档】
Tapestry 5的组件类要比Tapestry 4简单些,它们没有要继承的基类、是具体而非抽象的且没有XML文件,不过还是存在少量的以Java annotations形式的配置,但现在那些都直接声明在类的属性上,优于声明在抽象的getters和settes方法上(Tapestry 4中)。
页面、组件和组件混入类都以同种方式创建。
组件类基础
在Tapestry 5中创建页面和组件轻而易举!
不同于Tapestry 4,Tapestry 5中组件类不再是抽象的且不继承框架的基类。它们是纯粹的POJOs(Plain Old Java Objects)。
仅具有少量约束:
§ 类必须声明是公共的(public)。
§ 类必须放在正确的包下,按照application configuration。
§ 类必须具有一个标准公共的无参构造器。
以下是一个非常基础的组件: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 annotation是一个组件生命周期annotation,用来告诉Tapestry什么时候在什么情况下调用你类中的方法。
还有一点与Tapestry 4不同的是,方法不再需要声明为公共的(public),可以具有你想要的任何可见性。
组件包
组件类必须存放在一个相应的包中(运行时代码转换和类重载的需要)。这些包存放在应用根目录${root}包下。页面类放置在${root}.pages下,页面名匹配于这个包下的类名。
组件类放置在${root}.components下,组件类型(组件模板中标签属性t:type的引用)匹配于这个包下的类名。
混入(mixins)类放置在${root}.mixins下,Mixin类型匹配于这个包下的类名。
另外,整个应用存在基类很常见,通常是一些抽象的基类,不需要直接被引用。这些不应直接放在pages、components、mixins包下,因为它们这时看起来是有效的pages、components、mixins,我们用${root}.base包来存放这些基类。
子文件夹/子包
类不必直接放入${root}包下(pages、components、mixins等等),可以创建子包来存放一些类。子包名将成为页面名或组件类型的一部分。因此你可以定义页面组件com.example.myapp.pages.admin.CreateUser,与此同时页面逻辑名(显示在URL上的)将会是admin/CreateUser。
