Visit对象与Global对象是Tapestry框架的对象容器,我们可以在Visit对象和Global对象中存放任意信息。Visit对象和Global对象的区别在于他们的生命周期不同。
Visit对象
Visit对象是一个Tapestry应用程序的对象容器,用来存储应用程序逻辑和数据。这个对象能被应用程序中所有的页面和组件共享,并且包含Web应用程序中某一个客户端的特殊信息。该对象类似于HttpSession在典型Servlet应用程序中扮演的角色。实际上,Visit对象最终作为一个HttpSession的属性被存储。
为了在应用程序中使用一些与Session相关的数据,Tapestry提供了Visit对象。Tapestry并不知道也不关心Visit对象的类型。Tapestry框架对Visit对象的类型定义没有任何要求,每一个应用程序都可以定义自己的Visit类。不论是通过Tapestry属性注入而获得的HiveMind框架提供的Visit对象,还是通过AbstractPage类的public Object getVisit()方法获取的Visit对象,Tapestry都没有指定其具体类型。因此,我们需要对获取到的Visit对象进行强制类型转换。例如:
代码
- MyVisit vist =(MyVisit)getVisit();
Visit对象是Tapestry框架自动创建的,在Tapestry框架启动时通过读取应用程序规范文件,将Visit对象的配置信息存入Tapestry框架的引擎对象中。因此,我们可以随意在应用程序规范文件中定义自己的Visit对象类。
代码
- <meta key=”org.apache.tapestry.visit-class” value=”com.tapestry4.engine.MyVisit”/>
当客户端发出请求,HttpSession对象被创建时,Tapestry读取应用程序中Visit对象的配置信息,并创建Visit对象实例,然后将其存储在HttpSession中,知道HttpSession对象的生命周期结束。
如果有必要,我们可以通过HiveMind框架来创建Visit对象,只需要在应用程序的HiveMind配置文件hivemodule.xml中以下面的方式进行配置。
代码
- <contribution configuration-id=”tapestry.state.ApplicationObjects”>
- <state-object name=”flowStore” scope=”session”>
- <create-instance class=”com.tapestry.engine.FlowStore”/>
- </state-object>
- </contribution>
配置Hivemind提供的id为tapestry.state.ApplicationObjects的configuration。
创建一个Hivemind框架的state状态对象,名称为flowStore,声明周期为session。该状态对象是com.tapestry.engine.FlowStore类的实例。
当我们在页面中需要获取这个名称为flowStore的Visit对象时,可以通过Tapestry属性注入的方式。
代码
- <inject property=”myVisitobj” type=”state” object=”flowstore”/>
<inject> 元素的Type属性标明这里注入的是state状态对象,Object属性标明注入进来的是名称为flowStore的Visit对象。
Global对象
Global对象是一个应用程序空间,用来存储全局性的应用程序逻辑和数据。Global对象的作用如同Visit对象,不过它的生命周期是应用程序的整个周期。Global对象被所有的应用程序引擎对象和Session会话所共享。实际上,Global对象最终最为一个ServletContext的属性被储存。如果我们不指定Global对象,那么Tapestry将使用一个线程保护的HashMap来替代它。
Tapestry并不知道也不关心Global对象的类型。Tapestry框架对Global对象的类定义没有任何要求,每一个应用程序都可以定义自己的Visit类。不论是我们通过Tapestry属性注入而获得的HiveMind框架提供的Global对象,还是通过AbstractPage类的public Object getGlobal()方法获取的Global对象,Tapestry都没有指定具体类型。因此,我们需要对获取到的Global对象进行强制类型转换。例如:
MyGlobal global =(MyGlobal)getGlobal();
我们可以在应用程序规范文件中随意定义自己的Global对象类。
代码
- <meta key=”org.apache.tapestry.global-class” value=”com.tapestry4.engine.MyGlobal”/>
当应用程序被启动,ServletContext对象被创建时,Tapestry读取应用程序规范中Global对象的配置信息,并创建Global对象实例,然后将其储存在ServletContext对象中,直到应用程序被关闭。
如果有必要,我们可以通过Hivemind框架来创建Global对象,只需要在应用程序的Hivemind配置文件hivemodule.xml中以下面的方式进行配置。
代码
- <contribution configuration-id=”tapestry.state.applicationObject”>
- <state-object name=”flowstore” scope=”application”>
- <create-instance class=”com.tapestry.engine.FlowStore”/>
- </state-object>
- </contribution>
创建一个Hivemind框架的state状态对象,名称为flowStore,生命周期为application。该状态对象是com,tapestry.engine,FlowStore类的实例。
当我们需要在页面中获取这个名称为flowStore的Global对象时,可以通过Tapestry属性注入的方式。
代码
- <inject property=”myVisitObj” type=”state” object=”flowStore”/>
实际上,就<inject>元素的使用方式而言,向Tapestry属性中注入Visit对象和注入Global对象并没有任何差别。而关键在于这个被注入的对象实例本身的生命周期是session还是application。
请一定要注意,不论是Visit对象还是Global对象,它们并非是指某一个特定的对象类,而是代指两种不同生命周期的对象。只要进行了配置,任何Java类都可以成为Visit对象或Global对象。
相关推荐
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
【Tapestry笔记】 Tapestry是一个基于Java的Web应用框架,它采用了面向组件的开发方式,这使得它与其他如Structs、WebWork、SpringMVC等采用传统面向元素开发方式的框架有所不同。面向组件的开发模式旨在克服面向...
在这个“Tapestry学习文档”中,我们可以深入理解这个框架的核心概念和技术。 1. **组件化编程**: Tapestry的核心是组件,它将UI元素(如按钮、表单、列表等)封装为独立的、可重用的单元。每个组件有自己的状态...
本压缩包包含了一系列的学习资源,帮助开发者深入理解和掌握Tapestry 4和5的关键概念和技术。 1. **Tapestry5最新中文教程.doc**: 这份文档可能是针对Tapestry 5的最新中文教程,旨在为初学者提供一个易懂的入门...
《Tapestry学习资料》是一份综合性的资源集合,涵盖了Tapestry框架的三个主要版本:Tapestry 3、4和5。这份资料旨在帮助开发者深入理解和掌握Tapestry框架,提升Web应用开发的效率和质量。 Tapestry是由Apache软件...
本压缩包包含了丰富的Tapestry学习资料,总计约25M,涵盖了各种教程、教材和实践案例,对于想要深入理解和掌握Tapestry的开发者来说,是一份非常宝贵的资源。 1. **Tapestry基础** Tapestry基于组件模型,每个网页...
7. **性能优化**: Tapestry通过缓存和页面部分更新等技术提高了Web应用的性能。它会自动管理组件的状态,避免不必要的服务器请求,从而降低网络延迟。 8. **错误和异常处理**: Tapestry有内置的错误和异常处理...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型...通过学习"Tapestry简单入门.rar"中的文档,你将能够掌握这个框架的基础知识,为进一步深入学习和实践打下坚实基础。
是一本由多本Tapestry资料整合而成。包括一些Tapestry的实例。
发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf 前3章 ---------------------------- tapestry开发流程.docx -------------------...
7. **Tapestry-webresources**: 处理应用中的静态资源,如CSS、JavaScript文件,确保它们能正确地被浏览器访问。源码展示了资源管理、版本控制和URL生成的实现细节。 8. **Tapestry5-annotations**: 提供了基于Java...
本文档旨在提供一个全面且易于理解的 Tapestry 学习指南,帮助初学者快速上手并掌握 Tapestry 5.1 的核心功能。 #### 第一章:搭建 Tapestry 5.1 开发环境 ##### 1.1 安装 JDK - **原因**:Tapestry 5.1 使用了 ...
### Tapestry4开发指南 #### 一、Tapestry4概览 Tapestry4作为一款先进的Web应用框架,由Howard Lewis Ship所创造,旨在提供一种更为高效、灵活的Web应用构建方式。与前代Tapestry3相比,Tapestry4在设计上有了...
Tapestry 3的开发指南是学习和理解这一早期版本框架的关键资源,而提供的jar包则是实际开发中的必要依赖。 **一、Tapestry 3 的核心概念** 1. **组件**:Tapestry 3的核心是组件,它将HTML元素与Java代码结合,...
Tapestry5.0.16文档和大家一起学习
**Tapestry 实例详解** Tapestry 是一个开源的Java Web 应用程序框架,由Apache软件基金会维护。...通过深入学习和实践Tapestry,开发者可以创建出高效、可扩展的Web应用程序,享受到组件化开发带来的诸多益处。
Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...
Apache Tapestry 5 是一个基于Java的Web应用开发框架,其设计目的是为了简化Web应用程序的构建,提供组件化的页面构建、输入验证...通过学习和实践Tapestry 5,开发者能够更好地理解和掌握现代Web应用开发的最佳实践。
7. **自主分页**:Tapestry提供了内置的分页支持,允许开发者轻松地处理大量数据的展示。分页组件可以与数据源(如数据库查询结果)集成,提供上一页、下一页等导航功能,并且可以自定义每页显示的条目数量。 8. **...