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对象。
分享到:
相关推荐
"软件生命周期模型" 软件生命周期模型是软件开发过程中的一个重要概念,它描述了软件从概念到交付的整个生命周期。软件生命周期模型通常包括软件需求分析、软件设计、软件实现、软件测试、软件维护等几个阶段。 ...
ASP.NET生命周期是Web应用程序开发中的核心概念,它涵盖了从客户端浏览器发起请求到服务器响应的整个过程。这个生命周期涉及多个阶段,对于理解和优化ASP.NET应用程序的性能至关重要。 首先,当一个HTTP请求到达Web...
UIView的生命周期对于理解iOS应用中视图的加载和管理至关重要。在开发iOS应用时,了解UIView及其子类的生命周期方法,可以让开发者合理地安排资源的分配和释放,优化应用的性能,以及提供更好的用户体验。 首先,...
Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...
"TCBMF 29-2018 产品生命周期评价技术规范 水泥" TCBMF 29-2018 是一个关于水泥产品生命周期评价的技术规范,该规范旨在提供一套科学、系统、全面的方法,以评估水泥产品在其整个生命周期中的环境影响。以下是从该...
日志追踪(完成以下六步、明白android的四种状态的生命周期和相互切换): 1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause...
Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...
### Activity生命周期详解 #### 概述 Android应用开发中,`Activity`是四大基础组件之一,主要用于构建用户界面。理解`Activity`的生命周期对于管理应用的状态、资源以及响应用户交互至关重要。 #### `Activity`...
数据仓库生命周期工具箱 第二版 自1998年《数据仓库生命周期工具箱(第2版)》第一版出版以来,经过十多年的发展,数据仓库行业已经完全成熟,而且软硬件都有了极大的进步。那一版所提出的方法几乎已经被所有的数据...
安全开发生命周期(SDL)是一个帮助开发人员构建更安全的软件和解决安全合规要求的同时降低开发成本的软件开发过程。安全应用从安全设计开始,软件的安全问题很大一部分是由于不安全的设计而引入的,微软用多年的...
ASP.NET 页面生命周期描述 前言: ASP.NET 页面生命周期是指从页面初始化到最终呈现的整个过程。这个生命周期描述了页面是如何生成的,变量的生存周期。了解 ASP.NET 页面生命周期对开发者来说非常重要,因为它可以...
理解Activity的生命周期和启动模式对于开发高效、稳定的应用至关重要。让我们深入探讨Activity的7大生命周期以及4种启动模式。 **Activity生命周期** Activity的生命周期包括了从创建到销毁的各个阶段,主要有以下...
Oracle的生命周期政策确保了客户在每个产品的整个生命周期内都能获得必要的技术支持和服务,同时鼓励他们随着时间的推移升级到更先进的版本,以利用最新的技术和安全增强。这种策略不仅有助于维持系统的稳定性和安全...
软件生命周期模型选择及WBS分解是软件开发过程中的关键环节,它们对于确保项目的顺利执行、高效管理和高质量交付具有重要作用。软件生命周期模型是软件开发过程的一种结构化表示,它将软件的整个生命周期划分为不同...
VMware产品线生命周期手册是关于VMware公司各类产品支持和服务期限的重要指南,它详细列出了各个产品的发布日期、一般可用性、结束一般支持日期以及结束技术指导日期。这个手册对于VMware用户和管理员来说至关重要,...
Flex 4生命周期是Adobe Flex框架的核心组成部分,它详细规定了组件从创建到销毁的过程。在Flex 3到Flex 4的进化中,生命周期有了显著的变化,这些变化旨在提高性能、可扩展性和稳定性。 Flex框架的生命周期包括了...
在Apple的iOS应用开发中,程序的生命周期是开发者必须要深入理解的关键概念。程序生命周期涉及到从应用程序启动、运行、暂停、后台处理、恢复直至关闭的全过程。对于iPhone开发来说,掌握这个生命周期有助于编写更加...
Ability生命周期是指从创建到销毁的过程中,Ability所经历的一系列状态变化。理解并掌握Ability的生命周期对于开发高效、稳定的HarmonyOS应用至关重要。现在,我们将深入探讨Ability生命周期及其重要概念。 1. **...
不过,根据文件的标题和描述可以推断,这份文档涉及的是关于乘用车生命周期碳排放的核算技术规范,其内容应该是围绕如何评估和计算乘用车在其整个生命周期内产生的碳排放。 虽然没有具体内容可以分析,但我们可以...
IT服务管理生命周期模型是IT行业中一个重要的概念,它基于PDCA(Plan-Do-Check-Act,即计划、执行、检查、处理)循环理论,旨在系统性地管理和优化IT服务,确保服务质量满足业务需求。这一模型将服务管理分为四个...