Tapestry属性生命周期
Tapestry属性可能拥有持久化状态,在各个请求周期之间保存用户指定的Tapestry属性。当应用程序的某一部分请求一个页面时候,将会获得一个页面实例和用户先前存入持久化页面属性中的值。如果这个页面中调用的组件包含有持久化的组件属性,那么请求也将获得持久化组件属性的值。
页面实例不是session持久化。他们仅仅在第一次创建的时候存在于JavaVM的内存中。页面和组件不需要实现java.io.serializable接口,他们永远不会被序列化。而应用程序引擎对象总是不停地创建页面的新实例,并重新对页面赋予其先前被记录的状态。页面的状态也就是指页面所拥有的Tapestry属性(页面属性,以及页面调用组件的组件属性)的值。
在Tapestry中,属性的声明周期和重要。它拥有以下3种声明周期。
持久-----在各个请求周期之间,属性被记录并持久化。当属性被重载的时候,持久化页面属性被恢复。持久化Tapestry属性根据其声明的持久化策略已不同的方式被不同的用户共享。
瞬时----在页面表现之前,属性被设定,并且在当前请求结束的时候,重置为默认值。
动态----属性的值根据页面的表现而改变,但是在当前请求结束的时候,被重置。
持久化Tapestry属性就好像用户名,又像在商业应用程序中所显示的产品名称;而瞬时持久Tapestry属性通常只被使用一次,比如错误信息;而动态Tapestry属性与表现进程联系紧密,比如以某种排序显示一组条款,就可能需要动态Tapestry属性来为每一条款在循环中赋值。
1.持久化页面状态
Tapestry框架有责任在请求周期内跟踪页面状态的改变,并且在请求周期之间储存状态。实际上,这是应用程序的引擎对象的职责,通过页面记录器对象来完成。页面记录器是实现org.apache.tapestry.engine.IPageRecorder接口的对象,用于获取页面及其组件中属性的变化,并在请求周期内储存页面的状态。当一个页面的持久化状态被改变时,引擎对象通知页面记录器,并提供属性的名称以及新的值。这个“通知”作为一条信息被持久化地储存下来,当下一个请求周期到达的时候,页面记录器将根据这个信息将页面退回到先前的状态。
声明Tapestry属性持久化的工作由开发人员来完成,属性的值必须被序列化(非原始类型通过实现serializable接口来实现)。Tapestry属性的持久化有两种形式。
Session持久化 当页面被第一次访问的时候,页面属性的值被储存到HttpSession对象中,当页面需要操作页面属性的时候,从HttpSession中获取页面属性的值,当session会话的生命周期结束,页面属性的值即被清空。声明方法:
<property name=”username” persist=”session”/>
客户端持久化 当页面被第一次访问的时候,Tapestry框架自动向客户端浏览器中所偶表单添加hidden域以保存客户端持久化属性的值。并且页面上所有用于跳转的 URL都将会被添加客户端持久化属性进行操作的时候,Tapestry框架自动从客户端浏览器的hidden域中,或者从URL里包含的客户端持久化属性相关信息中获取到客户端持久化属性的值,并重新赋给对应的Tapestry属性。客户端持久化分为客户端应用程序持久化和客户端页面持久化。
客户端应用程序持久化:Tapestry属性的客户端持久化范围为整个应用程序,使用方法是在页面规范或组件规范中声明<property>元素的persist属性,且persist属性的值为”client:app”,例如:
<property name =”username” persist=”client:app”/>
客户端页面持久化:Tapestry属性的持久化范围是属性所在页面,使用方法是在页面规范或组件规范中声明<property>元素的persist属性,且persist属性的值为”client”或”client:page”例如:
<property name=”username” persist=”client:page”/>
<property name=”username” persist=”client”/>
2.瞬时页面状态
我们使用的大多数Tapestry属性都是瞬时的页面状态,瞬时的页面状态就如同我们在页面类中定义成员变量,同时创建该成员变量的标准JavaBean方法,并在initialize()方法中对其进行初始化。当页面表现的时候,瞬时的Tapestry属性被赋值,当页面表现结束时,瞬时的属性被还原为初始值。声明方法为:
<property name=”username”/>
3.动态页面状态
页面属性在页面表现的时候动态地改变。最典型的例子就是Foreach组件,例如:
<property name=”fruit”/>
<component id=”fruitListLoop” type=”Foreach”>
<binding name=”source” value=”fruitList”/>
<binding name=”value” value=”fruit”/>
</component>
在这里,组件ID为fruitListLoop的Foreach组件的value参数绑定了页面属性fruit,Foreach组件每遍历到其source参数所绑定fruitList集合中的每一个元素,就将这个元素赋予value参数绑定的页面属性fruit。于是该页面属性fruit的值在Foreach组件的整个循环遍历中,是不断被改变的。
当Foreach组件调用结束,整个页面表现完毕之后,value参数所绑定的fruit页面属性又会被还原为初始值。因此,动态页面状态实际上也是瞬时页面状态。
分享到:
相关推荐
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
在这个“Tapestry学习文档”中,我们可以深入理解这个框架的核心概念和技术。 1. **组件化编程**: Tapestry的核心是组件,它将UI元素(如按钮、表单、列表等)封装为独立的、可重用的单元。每个组件有自己的状态...
【Tapestry笔记】 Tapestry是一个基于Java的Web应用框架,它采用了面向组件的开发方式,这使得它与其他如Structs、WebWork、SpringMVC等采用传统面向元素开发方式的框架有所不同。面向组件的开发模式旨在克服面向...
压缩包中的“tapestry3”包含了运行Tapestry 3应用所需的全部库文件。这些jar包通常包括以下几类: 1. **Tapestry核心库**:提供框架的基础功能,如组件模型、事件处理和页面生命周期管理。 2. **依赖的第三方库**...
3. **tapestry开发流程.docx**: 这份文档详细介绍了使用Tapestry进行开发的步骤和流程,可能包括项目初始化、创建页面和组件、编写业务逻辑、测试以及部署等阶段。此外,它还可能涵盖了如何利用Tapestry的模块系统...
本压缩包包含了丰富的Tapestry学习资料,总计约25M,涵盖了各种教程、教材和实践案例,对于想要深入理解和掌握Tapestry的开发者来说,是一份非常宝贵的资源。 1. **Tapestry基础** Tapestry基于组件模型,每个网页...
3. **声明式编程**: 在Tapestry中,大多数的编程都是声明式的,这意味着开发者可以使用XML或注解来定义页面和组件的行为,而不是编写大量的Java代码。这降低了代码的复杂性,提高了可读性和维护性。 4. **页面和...
《Tapestry3文档》深度解析与应用指南 在IT领域,Tapestry是一个历史悠久且功能强大的开源框架,专门用于构建复杂的企业级Web应用程序。...无论是新手还是有经验的开发者,Tapestry3文档都是不可或缺的学习资源。
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型...通过学习"Tapestry简单入门.rar"中的文档,你将能够掌握这个框架的基础知识,为进一步深入学习和实践打下坚实基础。
是一本由多本Tapestry资料整合而成。包括一些Tapestry的实例。
《Tapestry3 In Action》这本书会详细介绍如何使用Tapestry 3创建动态网页,理解其核心概念,如组件生命周期、服务注入和模板语言。 随着Tapestry 4的发布,框架进一步完善,提供了更多的特性,如增强的国际化支持...
前3章 ---------------------------- tapestry开发流程.docx ------------------------------- Tapestry开发指南0.8.pdf ---------------------------------- tapestry用户手册.pdf 很详细 ------------------------...
3. **Tapestry Hibernate**: 这个库提供了与Hibernate ORM框架的集成,允许开发者方便地在Tapestry应用中使用Hibernate进行数据持久化操作。通过源码,我们可以学习如何在Tapestry中配置和使用Hibernate服务。 4. *...
与前代Tapestry3相比,Tapestry4在设计上有了重大革新,尤其是在与Hivemind框架的深度集成方面。Hivemind,同样由Howard开发,是一个轻量级的IoC(Inversion of Control)容器,用于管理对象间的依赖关系,使得...
本文档旨在提供一个全面且易于理解的 Tapestry 学习指南,帮助初学者快速上手并掌握 Tapestry 5.1 的核心功能。 #### 第一章:搭建 Tapestry 5.1 开发环境 ##### 1.1 安装 JDK - **原因**:Tapestry 5.1 使用了 ...
Tapestry5.0.16文档和大家一起学习
3. **示例项目**:“复件 frame3”可能是一个示例项目,你可以通过解压并运行来亲身体验Tapestry 的工作原理。 通过深入学习和实践Tapestry,开发者可以创建出高效、可扩展的Web应用程序,享受到组件化开发带来的...
Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...
Apache Tapestry 5 是一个基于Java的Web应用开发框架,其设计目的是为了简化Web应用程序的构建,提供组件化的页面构建、输入验证...通过学习和实践Tapestry 5,开发者能够更好地理解和掌握现代Web应用开发的最佳实践。