ADF faces会向pageflow
的正常会话,请求和视图范围添加新范围(称为managed beans
)。这个范围有什么作用?它的优点和缺点是什么?放入pageflowScope
内的对象什么时候收集垃圾?
答案 0 :(得分:10)
pageFlowScope bean的范围限定为“任务流”的ADF控制器概念,即无界任务流(UTF)或有界任务流(BTF)。在ADF中,任务流是在流中汇集在一起的页面或页面片段的集合,或者换句话说是一组定义的活动,包括路由器,方法调用和页面/页面片段调用。
pageFlowScope生命周期/范围是任务流的生命周期/范围。它们在首次通过任务流中的代码或EL(不一定是任务流程的开头)访问时就会存在,并且在任务流退出时(或用户注销或会话超时)超出范围。由于任务流可以以堆叠方式调用任务流,因此任何时候都可以使用serval pageFlowScope bean。
pageFlowScope没有那么多的优点/缺点,而是你何时应该使用它们。 pageFlowScope bean为任务流携带状态,并允许任务流的状态与较大的作用域会话和applicationScope bean分开,并且不会像较小的作用域请求,backingBean和视图作用域bean那样频繁地重新创建。例如,任务流的传入和传出参数非常适合存储在pageFlowScope中。作为要在当前页面上操作的计数器示例值,最好放在request / backingBean / view范围中。
pageFlowScope bean的另一个优点是他们了解多浏览器标签。如果同一会话在单独的浏览器选项卡中打开了两个应用程序实例,ADF将为每个选项卡生成两个单独的pageFlowScope bean,而sessionScope只会生成一个。这允许任务流在每个选项卡上具有独立状态。
最后解决您的上一个问题,当pageFlowScope bean本身超出范围时,即当任务流退出,用户注销或会话超时时,pageFlowScope bean中的对象才可用于垃圾收集。当然,如果程序员在pageFlowScope bean上保留了间接句柄,则通常需要注意,在此之前,bean不会成为垃圾收集的候选者。
答案 1 :(得分:1)
ADF具有任务流的概念,您可以将一些相关页面与导航规则放在一起。页面流范围涵盖了这种任务流的执行。这可能需要比请求更长的时间并且可以跨多个视图,因此此范围比请求和视图范围更长,但小于会话范围。当您离开构成任务流的页面时,范围将被销毁。作为一个非常简单的用例,可以考虑一个向导,在提交最终结果进行处理之前,您必须填写几页数据。
答案 2 :(得分:1)
除了以上帖子之外,pageFlowScope的主要用途是 ADF有界任务流有不同的活动。示例视图,方法调用,任务流返回等。
PageFlowScope用于在任务流中的活动之间共享数据。 此外,任务流的输入参数和输出参数都存储在页面流范围中。
答案 3 :(得分:1)
简单:
pageFlowScope :只要用户从一个页面导航到另一个页面,此范围就可用。如果用户打开一个新的浏览器窗口并开始导航,那么这一系列窗口将拥有自己的pageFlowScope范围。
每个ADF任务流实例都被授予了自己的页面流范围
当您离开任务流时,页面流范围不会被销毁,除非您使用任务流返回活动并调用终结器
您只能使用“任务流程返回”活动访问以前的左页面流量范围。
如何以编程方式访问pageFlowScope对象
AdfFacesContext context= AdfFacesContext.getCurrentInstance();
Map pageFlowScope = context.getPageFlowScope();
pageFlowScope.put("Name","myName");