Spring Webflow 阻止用户在流程完成后返回到流程的开始

Spring Webflow prevent user from going back to the start of the flow after flow completes

Spring Webflow 阻止用户在流程完成后返回到流程的开始并将用户带到结束状态。单击浏览器后退按钮应该将他带到错误页面而不是流程的开始。让我知道是否可以提供任何进一步的信息。

在用户单击后退按钮后重新进入流程时,您需要进行某种类型的条件检查或触发异常,其中任何一种都可以被捕获并处理以重定向到所需页面。

可能的解决方案:

1. 向用户会话添加一个变量,该变量指示用户无法再输入特定流程,并在流程开始时检查此变量。

      <decision-state id="checkBackButtonClick">
        <if test="externalContext.sessionMap.preventBackButtonClick" then="redirectToHomePage" else="continueToEditState"/>
      </decision-state> 

....

      <end-state id="end" view="externalRedirect:/pojos/#{somePojo.id}">
           <on-entry>
                <set name="externalContext.sessionMap.preventBackButtonClick" value="true" type="java.lang.Boolean"/>

            </on-entry>
      </end-state>

不过,上面的解决方案似乎是 "hack" 如果您只需要对 1 个或几个流使用此行为并且不需要太多实现,我认为这是一个很好的解决方案... (没有扩展 类、覆盖方法等...)

2. 另一种可能的解决方案是在流的输入参数上放置 'require=true' attribute/value。

<input name="id" required="true"/>

因此,如果用户在 url 中单击没有所需参数的后退按钮,流程将触发异常

org.springframework.webflow.engine.FlowInputMappingException:

并且取决于您如何处理网络流中的异常...您可以捕获此异常并重定向到您想要的 page/flow。假设您有 'input' 个标记参数。

3. 通过在 java 中扩展 AbstractFlowHandler 来实现您的流程,这将为您提供巨大的定制能力。显然第三个选项有更多 coding/work。将其用作最后的手段

http://www.springbyexample.org/examples/simple-spring-web-flow-webapp-code-example.html

ftp://courses.rvrjcce.ac.in/Java%20Sessions/Software/spring-webflow-2.1.1.RELEASE/docs/spring-webflow-reference/html/ch11s04.html

http://www.jonathanhui.com/spring-web-flow-flow-programming