2009年1月29日星期四

理解ADF ManagedBean Scope

概述

本文主要说明ADFManagedBean中的不同Scope

由于ADF Controller是在JSF的基础上扩展而来的,因此,在ADF中,在包含了JSF的三种Scope的基础上,又扩展出了另外三种Scope,使ADF Controller在实际应用中更为灵活和方便。

JSF标准Scope

Applicati onScope

sessionScope

requestScope

ADF Controller扩展Scope

pageFlowScope

backingBeanScope

viewScope

下面将针对每种Scope进行详细说明,以作用域由大到小排列。


详细说明

1、applicationScope

就从字面意思就可以看出,applicationScope是作用范围最广的,在作用于整个应用的运行周期内。通常情况下,applicationScope中的参数等都是在应用启动(web server启动)时即被初始化,因此,一般对于独立于特定的职责和角色的,且需要在整个应用的周期内都需要的资源会定义在applicationScopeManagedBean中。

2、sessionScope

仅次于applicationScope的是sessionScopesessionScope作用于从用户登录开始到用户主动结束该session,一般来说,都会为session设置超时时间,若超过服务器设置的超时时间的话,则该session被自动释放。在实际的应用中,经常会将类似于用户信息,预置文件信息或授权信息等设置到session中。

3、requestScope

requestScope的作用周期是在一次request之内,只要是在同一个request内,即使是在不同的页面也可以访问到作用在requestScope的内容。

4、pageFlowScope

ADF中引入了Task-Flow的概念, pageFlowScope作用于同一个Task Flow中,例:分别有A,B,C三个页面,同属于一个Task FlowD页面不属于该Task Flow,且A,B,C三个页面可以通过定义的action相互进行导航,同时也可以从这三个页面导航到D页面,建立pageFlowScopeManaged Bean此时,A,B,C三个页面可以同时访问到该Managed Bean中的属性。

5、viewScope

viewScope是指view id发生更改之前都可用,即作用于同一页面内,例如,在不同页面之间跳转时,viewScopeManaged Bean中的数据都会丢失。

6、backingBeanScope

backingBeanScope多用于page fragmentsdeclarative components,由于同一个页面中可能会拥有多个page fragmentsdeclarative components,因此,为了避免相互之间数据冲突,可以考虑使用backingBeanScopeManaged Bean

7、none

none的意思是说,即使在同一个页面,也不能访问到彼此none scopeManaged Bean中的属性。

下面是上述六种Scope的生命周期示意图:


1 评论:

Unknown 说...

嘿嘿,我还是喜欢 Seam,WebBeans :-)

发表评论