退出JSF流程

时间:2015-07-08 14:25:34

标签: java jsf jsf-2.2 flow-scope faces-flow

我开始使用JSF Flows,在阅读了一些示例和规范之后,我开始使用它。

我正在使用目录中的打包流程方法,如specification的第11.4.3.3节所述。它似乎更容易,更符合自JSF 2.0以来已采用的命名约定。

Bellow是我目前的目录结构。流ID是向导

Directory Structure

我理解通过调用返回节点有一个退出流的概念。

根据上图,您看到我没有返回节点视图。它只是一个向导,有一堆可以来回导航的页面,其优点是可以维护我的ManagedBean状态。

问题是,我可以导航到我的应用程序中的任何页面,而JSF仍然保持该流程的状态。如果我回到任何向导页面,所有信息仍然存在,这意味着JSF从未放弃流量范围。

我的问题是:

  1. 如果我有一个“完成”命令按钮,我怎么告诉JSF当用户点击该按钮时,它应该删除当前的流量范围?
  2. 更重要的是,如果我没有返回节点怎么办?如果用户导航到流目录外的任何视图*,如何告诉JSF删除流状态? (通过“流程”的概念,我认为这已经是标准行为了)
  3. *为了清楚起见,我的意思是另一个 JSF视图(我的应用程序中的另一个页面)。我知道如果用户向我的应用程序之外或JSF范围之外的页面发出请求,它就无法执行任何操作。

1 个答案:

答案 0 :(得分:0)

  

如果用户导航到任何一个,我如何告诉JSF删除流状态   在流目录外查看?

JSF无法知道您只是简单地重定向到说“http://google.de”。 bean将驻留在内存中,直到实现决定由于不使用而删除它。我有一个类似的问题,我现在可以想到的是使用一些JS-Handler,它会在后端触发一些逻辑来结束流程。一般情况下,如果您的浏览器崩溃而无法执行此JS代码,则无法解决此问题。

  

如果我有一个“完成”命令按钮,我怎么告诉JSF当时   用户点击该按钮,它应该删除当前的流量范围?

您必须定义所谓的返回节点(-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>

您必须确保您的命令按钮在action属性中返回“exit”。例如:

<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"/>