好的,所以我已经读过
了http://docs.oracle.com/javaee/7/tutorial/doc/jsf-configure003.htm
https://blogs.oracle.com/arungupta/entry/jsf_2_2_faces_flow
还有几个帖子。我无法通过阅读这些资源得到答案的问题是:
如何通过导航到随机视图来摆脱流?为了澄清我的问题,让我举一个例子。
假设我正在构建一个 Web 应用程序,其中包含一个侧边栏,其中包含各种内容的菜单(员工的 crud、客户的 crud 以及其他 crud 和报告)。
然后我想启动一个 facesflow 来正确处理复杂对象的创建,因为这个创建分为几个视图(顺便说一句,我知道如何启动它)。但是,如果用户单击,例如,生成与流无关的报告的链接,我该如何结束流。
流是否会保留在内存中?是否通过保留与流关联的视图来自动完成?
写下这个问题时,我想到第二种选择是最好的。如果用户转到与流无关的另一个视图,则流会神奇地消失。
好的,在同事的帮助下,我(凭经验)找到了这个问题的答案。
简短的回答:
您可以将流保留为所需的任何视图,但流是否会死亡取决于您如何离开它。如果通过 post 请求将其保留到不在流中的另一个视图,则当前流将正确结束。
但是,如果您通过 get 请求将其保留到流中不存在的任何视图,则流将不会关闭,它将驻留在内存中。
我会尽快详细说明。
更新
为了澄清,我们通过使用Java VisualVM并检查流的实例是否会持久存在或由GC收集来发现这一点。
您是对的,在流内导航或流外部的视图需要使用 h:commandButton/h:commandLink 或以编程方式处理导航。有关示例,请参阅此答案。
这肯定是Faces Flow的一个缺点,因为使用GET的导航应该是标准情况。