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对象。
分享到:
相关推荐
同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等阶段,一般称为“软件生命周期”。软件生命周期模型,通俗说就是,软件开发过程中所遵循的模式,即把整个软件生存周期划分为若干阶段...
日志追踪(完成以下六步、明白android的四种状态的生命周期和相互切换): 1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause...
数据仓库生命周期工具箱 第二版 自1998年《数据仓库生命周期工具箱(第2版)》第一版出版以来,经过十多年的发展,数据仓库行业已经完全成熟,而且软硬件都有了极大的进步。那一版所提出的方法几乎已经被所有的数据...
Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期
IIS7.0 ASP.NET 应用程序生命周期ASP.NET 应用程序生命周期ASP.NET 应用程序生命周期
如何了解软件的生命周期软件的生命周期如何了解软件的生命周期软件的生命周期如何了解软件的生命周期软件的生命周期如何了解软件的生命周期软件的生命周期如何了解软件的生命周期软件的生命周期如何了解软件的生命...
Asp.Net应用程序生命周期以浏览器向Web服务器(IIS)发送请求为起点。Web服务器接收到请求时,会对所请求文件的文件扩展名进行检查,确定应该由哪一个ISAPI扩展(Asp.Net是Web服务器下的一个ISAPI扩展)来处理请求,...
spring bean 的生命周期,把运行结果的日志,用sublime打开对比查看,你会有比较清晰的认识
JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结
工业产品、能源产品、生活产品、废弃物处理、交通服务、碳汇6大领域、1081个产品全生命周期碳排放因子数据集Excel表。
对于采用不同软件生命周期模型的项目在实施CMM 当中遇到的实际问题及其产生机理进行了深入分析,并提出初步的解决方案,主要涉及:采用迭代式生命周期模型的项目在实施需求管理过程域的部分内容时难以满足CMM 的要求...
IT资产全生命周期管理方案
在整个生命周期中,建筑物向大气中排放大量二氧化碳,这直接导致温室效应加剧,并严重威胁环境和人类。 研究人员做出了许多努力来精确计算排放量,以减少住宅建筑的生命周期碳排放量。 然而,在没有特定数据的情况下...
软件生命周期模型(共73张PPT)精选.pptx
当听到这个题目的时候,我得意地笑了笑,对于Activity的生命周期已经记熟的我,心想,为什么不直接问Activity的生命周期呢?于是想当然的说出了如下的答案: 在A跳转B会执行:A onPause -> A onStop -> B onCreate...
通过对高新技术企业不同生命周期阶段的特征进行分析,运用层次分析法和模糊综合评价法给出不同生命周期阶段的划分方法,并针对不同的生命周期阶段研究合适的价值评估方法,为如何界定高新技术企业所处的生命周期阶段...
ASP.NET Web Page的生命周期可以基本分为以下几个阶段: 1. Page request 本页面被请求时发生在web page生命周期之前, 当有一个页面被请求时,ASP.NET引擎要判断一下这个页面是否需要经过编译或者直接通过此页面的...
金融数据安全+数据生命周期安全规范.docx金融数据安全+数据生命周期安全规范.docx金融数据安全+数据生命周期安全规范.docx金融数据安全+数据生命周期安全规范.docx金融数据安全+数据生命周期安全规范.docx金融数据...
该文档是介绍数据科学项目生命周期的书籍,请大家下载!