在Tapestry框架运行时,通过反射机制生成一个继承于我们页面类的子类,根据页面规范或组件规范中声明的属性,向这个反射生成的子类中添加标准的JavaBean属性,这就是属性指定的运作过程。在页面规范中声明的数据称为页面属性;在组件规范中声明的属性成为组件属性。其实,不论页面属性还是组件属性,他们都以完全一样的方式进行声明和使用。将Tapestry属性分为页面属性和组件属性,只不过为了方便称呼。
例如,在登录页面Home,为了拥有一个用户名和密码的输入值载体,我们在页面规范Home.page中声明两个页面属性。
代码
- <property name=”username”/>
- <property name=”password”/>
为了在页面类Home.java中能够获取到这两个页面属性,我们需要定义两个对应于页面属性的JavaBean抽象getter方法。
代码
- Public abstract string getUsername();
- Public abstract string getPassword();
在页面规范或组件规范中声明属性的时候,我们并不需要声明其类型。Tapestry框架根据我们在页面类或组件类中声明的JavaBean抽象的getter/setter方法类型来决定属性的类型。
从反射机制的角度,由于Tapestry框架运行时会生成一个集成于页面类的子类,根据Java的多态性,我们很容易理解,既然子类生成的是标准JavaBean属性,那么当我们在父类(页面类或组件类)中调用JavaBean属性的抽象getter方法,即可以获得子类JavaBean中装载的值。
同样,如果我们需要在页面类中设置属性值,那么可以在页面类中添加对应的JavaBean属性抽象的setter方法。如:
代码
- Public abstract void setUsername(String username);
- Public abstract voif setPassword(String password);
-
现在我们已经理解了页面属性(或组件属性)的概念,因此我们可以通过在页面类中添加JavaBean属性的方式来达到页面属性相同的效果。在Home.java中:
代码
- Private string password;
- Protected void initialize(){
- This.password = null;
- }
- Public String getPassword(){
- Return password;
- }
- Public void setPassword(String password){
- This.password = password;
- }
除了标准的JavaBean属性,我们需要注意的是protected void initialize()方法。所有的页面类都继承于org.apache.tapestry.html.BasePage类,而BasePage类继承于AbstractPage类,protected void initialize() 方法是org.apache.tapestry.AbstractPage类中的方法。
实际上,页面属性在运作的时候,Tapestry框架不光为其添加标准的JavaBean属性还在页面表现之前和表现之后,两次对页面属性进行初始化。而protected void initialized() 方法具有同样的初始化作用,在页面表现之前和表现之后,两次对页面类中的成员变量进行初始化。
需要注意的是,org.apache.tapestry.AbstractComponent 类中并没有protected void initialize() 方法,而所有的组件类都继承于AbstractComponent类。因此我们不能用这样方式对组件类中的成员变量进行初始化。
Tapestry框架对页面属性或组件属性的默认初始化值是Java各种类型对象的默认值,如int型为0,String型为NULL等。我们需要对页面属性(或组件属性)进行自定义的初始化事例如下:
代码
- <property name=”username” initial-value =”literal:我爱Tapestry”/>
如这里对页面属性username的声明所示,我们为该页面属性提供一个初始化值:字符串“我爱Tapestry”。它的作用等同于在页面类中对成员变量username进行以下声明。
代码
- Private String username;
- Protected void initialize(){
- This.username=” 我爱Tapestry”;
- }
- Public String getUsername(){
- Return username;
- }
- Public void setUsername(String username){
- This.username=username;
- }
相关推荐
4. Tapestry 使得开发的应用很容易维护和升级。 Tapestry 的应用场景: 1. Tapestry 适合开发大型的 web 应用程序。 2. Tapestry 适合需要强大灵活性的 web 应用程序。 3. Tapestry 适合需要快速开发和维护的 web ...
本压缩包包含了一系列的学习资源,帮助开发者深入理解和掌握Tapestry 4和5的关键概念和技术。 1. **Tapestry5最新中文教程.doc**: 这份文档可能是针对Tapestry 5的最新中文教程,旨在为初学者提供一个易懂的入门...
在这个“Tapestry学习文档”中,我们可以深入理解这个框架的核心概念和技术。 1. **组件化编程**: Tapestry的核心是组件,它将UI元素(如按钮、表单、列表等)封装为独立的、可重用的单元。每个组件有自己的状态...
【Tapestry笔记】 Tapestry是一个基于Java的Web应用框架,它采用了面向组件的开发方式,这使得它与其他如Structs、WebWork、SpringMVC等采用传统面向元素开发方式的框架有所不同。面向组件的开发模式旨在克服面向...
【Tapestry4开发指南】 Tapestry4是一款基于...随着对Tapestry4的深入学习,你会发现它在构建复杂、高性能的Web应用时的强大潜力,同时,Hivemind的集成使你能够灵活地调整和扩展框架的功能,以满足特定的业务需求。
在深入探讨Tapestry 4的编程模型时,读者将学习如何使用Ivy或Maven来管理依赖,理解配置文件的结构,以及如何编写自定义组件。此外,书中还会涉及组件库的使用,包括内置的表单组件、导航组件等,这些组件可以帮助...
《Tapestry学习资料》是一份综合性的资源集合,涵盖了Tapestry框架的三个主要版本:Tapestry 3、4和5。这份资料旨在帮助开发者深入理解和掌握Tapestry框架,提升Web应用开发的效率和质量。 Tapestry是由Apache软件...
"Tapestry4 Users Guide" 和 "Tapestry4 Quick Start" 这两份文档,分别提供了全面的用户指南和快速入门教程,帮助开发者了解和掌握Tapestry 4的使用方法和最佳实践。 10. **社区支持**: 作为Apache项目的一部分...
虽然Tapestry 4的中文文档较少,但提供的《Tapestry4 用户指南》和《Tapestry4 快速启动》是宝贵的参考资料。它们将帮助初学者理解Tapestry的基本概念、组件使用、事件处理等方面的知识。 总的来说,Tapestry 4是...
本压缩包包含了丰富的Tapestry学习资料,总计约25M,涵盖了各种教程、教材和实践案例,对于想要深入理解和掌握Tapestry的开发者来说,是一份非常宝贵的资源。 1. **Tapestry基础** Tapestry基于组件模型,每个网页...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型...通过学习"Tapestry简单入门.rar"中的文档,你将能够掌握这个框架的基础知识,为进一步深入学习和实践打下坚实基础。
总的来说,通过学习这本书的源代码,开发者不仅可以掌握Tapestry4的基本用法,还能深入理解框架的内部工作原理,从而更好地运用到实际项目中,提高开发效率和代码质量。无论是初学者还是有经验的开发者,都可以从这...
Tapestry4开发指南.rar Tapestry4开发指南.rar Tapestry4开发指南.rar
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...
是一本由多本Tapestry资料整合而成。包括一些Tapestry的实例。
4. **Tapestry MongoDB**: 对MongoDB数据库的支持,让开发者能够利用NoSQL数据库的优势。源码揭示了如何在Tapestry应用中集成MongoDB,进行数据存取操作。 5. **Tapestry-ioc-junit**: 这是Tapestry与JUnit测试框架...