技术开发 频道

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。 

0
相关文章