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

时间:2015-05-18 18:39:17

标签: spring spring-webflow spring-webflow-2

Spring Webflow阻止用户在流程完成并且用户进入结束状态后返回流程的开头。单击浏览器后退按钮应该将他带到错误页面而不是流程的开头。如果我能提供任何进一步的信息,请告诉我。

1 个答案:

答案 0 :(得分:3)

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

可能的解决方案:

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>

虽然,上面的解决方案似乎是一个&#34; hack&#34;我认为这是一个很好的解决方案,如果你只需要一个或几个流的这种行为,它不需要太多的实现...(没有扩展类,重写方法等...)

2. 另一种可能的解决方案是放置一个&#39; require = true&#39;流的输入参数的属性/值。

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

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

org.springframework.webflow.engine.FlowInputMappingException:

根据您在Webflow中处理异常的方式...您可以捕获此异常并重定向到您想要的页面/流程。假设你有输入&#39; tag params。

3. 通过在java中扩展AbstractFlowHandler来实现您的流程,这将为您提供大量的自定义功能。显然第三个选项带有更多的编码/工作。将它作为最后的手段使用

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