【发布时间】:2015-07-30 09:27:17
【问题描述】:
Spring Webflow 阻止用户在流程完成后返回到流程的开头并且用户被带到结束状态。单击浏览器后退按钮应该会将他带到错误页面,而不是流程的开始。如果我可以提供任何进一步的信息,请告诉我。
【问题讨论】:
标签: spring spring-webflow spring-webflow-2
Spring Webflow 阻止用户在流程完成后返回到流程的开头并且用户被带到结束状态。单击浏览器后退按钮应该会将他带到错误页面,而不是流程的开始。如果我可以提供任何进一步的信息,请告诉我。
【问题讨论】:
标签: spring spring-webflow spring-webflow-2
在用户单击后退按钮后重新进入流程时,您需要进行某种类型的条件检查或触发异常,在该异常中可以捕获并处理任何一个以重定向到所需页面。
可能的解决方案:
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”属性/值。
<input name="id" required="true"/>
因此,如果用户在 url 中没有所需参数的情况下单击返回按钮,则流程将触发异常
org.springframework.webflow.engine.FlowInputMappingException:
根据您在 Web 流中处理异常的方式...您可以捕获此异常并重定向到所需的页面/流。假设您有“输入”标签参数。
3. 通过在 java 中扩展 AbstractFlowHandler 来实现您的流程,这将为您提供巨大的定制能力。显然,第三个选项带有更多的编码/工作。使用它作为最后的手段
http://www.springbyexample.org/examples/simple-spring-web-flow-webapp-code-example.html
【讨论】: