本文主要说明ADF的ManagedBean中的不同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启动)时即被初始化,因此,一般对于独立于特定的职责和角色的,且需要在整个应用的周期内都需要的资源会定义在applicationScope的ManagedBean中。
2、sessionScope
仅次于applicationScope的是sessionScope,sessionScope作用于从用户登录开始到用户主动结束该session,一般来说,都会为session设置超时时间,若超过服务器设置的超时时间的话,则该session被自动释放。在实际的应用中,经常会将类似于用户信息,预置文件信息或授权信息等设置到session中。
3、requestScope
requestScope的作用周期是在一次request之内,只要是在同一个request内,即使是在不同的页面也可以访问到作用在requestScope的内容。
4、pageFlowScope
在ADF中引入了Task-Flow的概念, pageFlowScope作用于同一个Task Flow中,例:分别有A,B,C三个页面,同属于一个Task Flow,D页面不属于该Task Flow,且A,B,C三个页面可以通过定义的action相互进行导航,同时也可以从这三个页面导航到D页面,建立pageFlowScope的Managed Bean此时,A,B,C三个页面可以同时访问到该Managed Bean中的属性。
5、viewScope
viewScope是指view id发生更改之前都可用,即作用于同一页面内,例如,在不同页面之间跳转时,viewScope的Managed Bean中的数据都会丢失。
6、backingBeanScope
backingBeanScope多用于page fragments和declarative components,由于同一个页面中可能会拥有多个page fragments或declarative components,因此,为了避免相互之间数据冲突,可以考虑使用backingBeanScope的Managed Bean。
7、none
none的意思是说,即使在同一个页面,也不能访问到彼此none scope的Managed Bean中的属性。
下面是上述六种Scope的生命周期示意图:
1 评论:
嘿嘿,我还是喜欢 Seam,WebBeans :-)
发表评论