3

pageflow除了正常的会话、请求、查看范围之外,ADF 面还公开了一个新范围(称为) managed beans。这个范围有什么作用?它的优点和缺点是什么?放在里面的对象什么时候pageflowScope被垃圾收集?

4

4 回答 4

10

pageFlowScope bean 的范围限定为“任务流”的 ADF 控制器概念,即无界任务流 (UTF) 或有界任务流 (BTF)。在 ADF 中,任务流是页面或页面片段的集合,这些页面或页面片段汇集在一个流中,或者换句话说,是一组定义的活动,包括路由器、方法调用和页面/页面片段调用。

pageFlowScope 生命周期/范围是任务流的生命周期/范围。它们在任务流中第一次通过代码或 EL(不一定是任务流的开头)访问时就存在,而在任务流退出(或用户注销或会话超时)时超出范围. 由于任务流可以以堆叠的方式调用任务流,因此任何时候都可能有多个 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 不会成为垃圾收集的候选对象。

于 2013-01-15T06:16:04.167 回答
1

ADF 具有任务流的概念,您可以在其中将一些相关页面与导航规则放在一起。页面流范围涵盖了这样一个任务流的执行。这可能需要比请求更长的时间,并且可以跨越多个视图,因此此范围比请求和视图范围长,但小于会话范围。当您离开组成任务流的页面时,范围会被破坏。作为一个非常简单的用例,请考虑一个向导,在该向导中,您必须在提交最终结果进行处理之前填写几页数据。

于 2013-01-14T20:52:29.133 回答
1

除了上述帖子之外,pageFlowScope 的主要用途是 ADF 有界任务流具有不同的活动。示例视图、方法调用、任务流返回等。

PageFlowScope 用于在任务流中的活动之间共享数据。任务流的输入参数和输出参数也存储在页面流范围内。

于 2013-03-09T05:05:35.287 回答
1

简单地说

pageFlowScope:只要用户从一个页面导航到另一个页面,此范围就可用。如果用户打开一个新的浏览器窗口并开始导航,则该系列窗口将拥有自己的 pageFlowScope 范围。

  1. 每个 ADF 任务流实例都被授予其自己的页面流范围

  2. 当您离开任务流时,页面流范围不会被破坏,除非您使用任务流返回活动并调用终结器

  3. 您只能通过使用任务流返回活动来访问先前离开的页面流范围。

如何以编程方式访问 pageFlowScope 对象

    AdfFacesContext context= AdfFacesContext.getCurrentInstance();
    Map pageFlowScope = context.getPageFlowScope();
    pageFlowScope.put("Name","myName");
于 2014-10-16T11:46:07.610 回答