Java 退出JSF流
我开始使用JSF流,在阅读了一些示例和规范之后,我开始使用它 我正在使用目录中的打包流方法,如本手册第11.4.3.3节所述。这似乎更容易,更符合自JSF2.0以来已经采用的命名约定 下面是我当前的目录结构。流id是向导 我理解通过调用返回节点退出流的概念 从上图可以看出,我没有返回节点视图。它只是一个向导,有一堆可以来回导航的页面,优点是我的ManagedBean状态保持不变 问题是,我可以导航到应用程序中的任何页面,JSF仍然保持该流的状态。如果我回到任何一个向导页面,所有的信息仍然在那里,这意味着JSF从未放弃过流作用域 我的问题是:Java 退出JSF流,java,jsf,jsf-2.2,flow-scope,faces-flow,Java,Jsf,Jsf 2.2,Flow Scope,Faces Flow,我开始使用JSF流,在阅读了一些示例和规范之后,我开始使用它 我正在使用目录中的打包流方法,如本手册第11.4.3.3节所述。这似乎更容易,更符合自JSF2.0以来已经采用的命名约定 下面是我当前的目录结构。流id是向导 我理解通过调用返回节点退出流的概念 从上图可以看出,我没有返回节点视图。它只是一个向导,有一堆可以来回导航的页面,优点是我的ManagedBean状态保持不变 问题是,我可以导航到应用程序中的任何页面,JSF仍然保持该流的状态。如果我回到任何一个向导页面,所有的信息仍然在那里
<?xml version="1.0"?>
<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<application/>
<flow-definition id="myflow">
<view id="Page1">
<vdl-document>/myflow/Page1.xhtml</vdl-document>
</view>
<start-node>Page1</start-node>
<flow-return id="exit">
<from-outcome>/home.xhtml</from-outcome>
</flow-return>
</flow-definition>
</faces-config>
/myflow/Page1.xhtml
第1页
/home.xhtml
您必须确保命令按钮在操作属性中返回“退出”。例如:
<p:commandButton value="Finish Flow" action="exit"/>
在流中,每当您通过“action”属性重定向到某个新页面时,请确保将“faces redirect=true”附加到URL,否则,至少在我的情况下,会出现“No active context”错误。例如,像这样:
<p:commandButton value="Next Page" action="Page2.xhtml?faces-redirect=true"/>
如果用户导航到任何位置,我如何告诉JSF放弃流状态
是否在流目录之外查看
JSF无法知道您只是重定向到说“”。bean将驻留在内存中,直到实现决定由于未使用而将其删除。我有一个类似的问题,我现在能想到的就是使用一些JS处理程序,它会在后端触发一些逻辑来结束流。在一般情况下,如果您的浏览器崩溃而无法执行此JS代码,则无法解决此问题
如果我有一个“finish”命令按钮,那么当
用户单击该按钮,是否应删除当前流范围
您必须定义所谓的返回节点(-s)。我将为您提供一个成功结束流程的配置示例:
<?xml version="1.0"?>
<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<application/>
<flow-definition id="myflow">
<view id="Page1">
<vdl-document>/myflow/Page1.xhtml</vdl-document>
</view>
<start-node>Page1</start-node>
<flow-return id="exit">
<from-outcome>/home.xhtml</from-outcome>
</flow-return>
</flow-definition>
</faces-config>
/myflow/Page1.xhtml
第1页
/home.xhtml
您必须确保命令按钮在操作属性中返回“退出”。例如:
<p:commandButton value="Finish Flow" action="exit"/>
在流中,每当您通过“action”属性重定向到某个新页面时,请确保将“faces redirect=true”附加到URL,否则,至少在我的情况下,会出现“No active context”错误。例如,像这样:
<p:commandButton value="Next Page" action="Page2.xhtml?faces-redirect=true"/>
在您回答的第一个问题中,我的意思是,当用户导航到另一个视图时,我希望JSF删除流状态,我的意思是JSF范围内的视图,该视图将由Faces Servlet提供服务,而不是我的应用程序之外的某个URL(如您的示例)。JSF确实知道用户需要什么视图,以及他/她来自何处,所以我认为仍然有一种方法可以做到这一点(可能是通过编程实现的?使用阶段侦听器?idk,这是我的问题)。更新了我的问题。至于你回答的第二个问题,就是它,谢谢。在你回答的第一个问题中,我的意思是当用户导航到另一个视图时,我希望JSF删除流状态,我的意思是JSF范围内的视图,它将由Faces Servlet提供服务,不是我的应用程序之外的某个URL(例如你的)。JSF确实知道用户需要什么视图,以及他/她来自何处,所以我认为仍然有一种方法可以做到这一点(可能是通过编程实现的?使用阶段侦听器?idk,这是我的问题)。更新了我的问题。至于你回答的第二个问题,就是这个,谢谢。