【问题标题】:Exiting a JSF Flow退出 JSF 流
【发布时间】:2015-07-08 14:25:33
【问题描述】:

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

我正在使用 Packaging Flows in Directories 方法,如specification 的第 11.4.3.3 节所述。它似乎更容易,更符合自 JSF 2.0 以来已经采用的命名约定。

下面是我当前的目录结构。流 id 是wizard

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

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

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

我的问题是:

  1. 如果我有一个“完成”命令按钮,我如何告诉 JSF 当用户单击该按钮时,它应该放弃当前的流范围?
  2. 更重要的是,如果我没有返回节点怎么办?如果用户导航到流目录之外的任何视图*,我如何告诉 JSF 放弃流状态? (根据“流”的概念,我认为这已经是标准行为)

*为了清楚起见,我的意思是另一个 JSF 视图(我的应用程序中的另一个页面)。我知道如果用户触发对我的应用程序或 JSF 范围之外的页面的请求,它就无法执行任何操作。

【问题讨论】:

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


    【解决方案1】:

    如果用户导航到任何位置,我如何告诉 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>
    

    您必须确保您的命令按钮在操作属性中返回“退出”。例如:

    <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 在用户导航到另一个 view 时放弃流状态,我的意思是一个视图在 JSF 范围内,这将由 Faces Servlet 提供服务,而不是我的应用程序之外的某个 URL(比如你的例如)。 JSF 确实知道用户要求什么视图,以及他/她来自哪里,所以我认为仍有办法做到这一点(也许以编程方式?使用 Phase Listener?idk,这是我的问题)。更新了我的问题。
    • 至于你回答的第二个问题,就是这样,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多