2009年9月9日星期三

ADF_009:ADF Managed Bean

ADF Managed Bean 与JSF Managed Bean在概念上没有什么不同,有关Managed Bean的概念请参考《JSF Managed Bean 》。
二者主要的不同点在于Memory Scope,ADF ManagedBean的Scope比JSF Managed Bean多了pageFlowScope、viewScope、backingBeanScope。

  • pageFlowScope
    Managed Bean在Task Flow中的所有Page可见,且访问的同一个实例。
    如果其它Task Flow中的Page访问该Managed Bean,将会创建一个新实例,供这个Task Flow中的所有Page使用。

  • viewScope
    只在当前这个View(可能是root browser window,也可能是region)可见,当viewId发生改变后,该Managed Bean被释放掉。

  • backingBeanScope
    一个Page中含有一个Task Flow,并且这个Task Flow使用了多个region,设置此值可以起到隔离各个region的作用(会在每个region中创建一个实例),避免数据冲突。
    backingBeanScope多用于page fragments和declarative components,因为同一个页面中可能会拥有多个此类对象。


Managed Bean可以定义在三个文件中:adfc-config.xml,Task flow XML definition file,faces-config.xml。
它们的区别如下:
1. adfc-config.xml
(1)对于unbounded task flow,会先检查faces-config.xml再检查adfc-config.xml。
(2)Request-scoped managed beans优先于session-scoped managed beans。
比如定义在adfc-config.xml的Request Scope的Bean,优先级高于定义在Task flow中的Session Scope的同名Bean。
(3)已经初始化的managed beans优先于还未初始化的managed beans。
比如一个已经初始化的session-scoped managed bean,优先级高于定义在task flow中的request-scoped的同名Bean。

2. 定义在task flow中
(1)定义在task flow中的managed beans只在该task flow中可见。
(2)对于unbounded task flow,会先检查faces-config.xml再检查adfc-config.xml,并且仅限于application-scoped 和session-scoped的managed bean。
(3)Request-scoped managed beans优先于session-scoped managed beans。
比如定义在adfc-config.xml的Request Scope的Bean,优先级高于定义在Task flow中的Session Scope的同名Bean。
(4)已经初始化的managed beans优先于还未初始化的managed beans。
比如一个已经初始化的session-scoped managed bean,优先级高于定义在task flow中的request-scoped的同名Bean。

3. faces-config.xml
(1)只能定义JSF标准规范的四种Scope。
(2)在faces-config.xml中定义的managed bean优先级别最高,比定义在adfc-config.xml和task flow中的managed bean都高。

3. faces-config.xml
Managed Bean 最佳使用实践:
(1)对于Fusion Web Application,不要在faces-config.xml中定义任何managed bean。
(2)如果一个Bean可能会被多个页面或多个task flow使用,将其定义在adfc-config.xml中。
(3)如果一个Bean只会在一个特定的task flow中使用,将其定义在该task flow xml定义中。
(4)managed bean中应该只有与UI组件相关的逻辑,处理业务数据的逻辑应该交给业务服务层去做。
这样业务服务层的逻辑可以通过DataControl暴露出来,供managed bean使用。

参考文献:
1. http://eleven-china.blogspot.com/2009/01/adf-managedbean-scope.html
2. http://blog.csdn.net/luyushuang/article/details/6774399
3. http://jjzheng.blogspot.com/2011/06/adf-managed-bean-memory-scope-and-its.html

没有评论: