【问题标题】:Spring Webflow prevent user from going back to the start of the flow after flow completesSpring Webflow 阻止用户在流程完成后返回流程的开头
【发布时间】:2015-07-30 09:27:17
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    可能的解决方案:

    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

    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

    【讨论】:

    • history='invalidate' 选项似乎仅在“视图状态”下的转换标签上可用。就我而言,我从 -> -> 开始。一旦我处于结束状态,我不希望后退浏览器点击带我回到流程的开始。
    • @user1187958 嗯,我有一段时间没有这样做了。我认为您想要做的是在触发后退按钮时触发异常,然后处理异常以重定向到您想要的页面......或者每次流程开始时执行验证检查(如果缺少参数) 并在那里触发重定向。我将沿着这些路线进行实验,看看我想出了什么
    • @user1187958 我通过调查更新了答案。我找不到任何内置内容,但根据您的用例,上述解决方案将很容易实现。
    • 谢谢!我在会话中设置值以防止后退按钮。非常感谢您的努力!
    猜你喜欢
    • 2011-08-13
    • 2013-08-08
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多