Grails webflow - 在同一会话中交换Webflow

时间:2013-09-15 21:13:22

标签: grails

我有一个带有两个webflow的Grails应用程序:

  1. One for Purchasing
  2. 与我们联系的另一个
  3. 问题:

    用户在购买向导(通过网络流)中采取了许多步骤,他/她然后决定他们有问题并尝试联系我们(也通过网络流)。因此,用户点击“联系我们”'链接在我们的导航菜单上,但他们会回到他们在购买流程中的最后一步。就我个人而言,我认为它与“执行”有关。在会话中键入每个链接后缀为ie

    ..... / CONTACT_US /索引?执行= e1s1

    我想要的解决方案:

    我希望(在上述情况下),如果用户决定自己从“购买流程”中进行交换'联系我们的流程'那个购买流程'失效/被删除,用户在“联系我们”流程中从头开始。

    Grails版本2.2.3 Webflow插件:2.0.8.1

    尝试解决方案

    我能想到的最好的解决方案(不做太难看的事情)就是创建一个过滤器,当点击一个链接开始一个新流并尝试删除另一个流时,该过滤器会截获。但是,在此示例中,令人惊讶的是无法在流存储库中找到流(nullpointer)。

    FlowExecutionLock flowExecutionLock = null;
    SessionBindingConversationManager conversationManager = applicationContext.getBean('conversationManager');
    DefaultFlowExecutionRepository flowExecutionRepository = applicationContext.getBean("flowExecutionRepository");
    try {
        String executionKey = params.get("execution");// executionKey is something like 'e1s1'
        FlowExecutionKey flowExecutionKey = flowExecutionRepository.parseFlowExecutionKey(executionKey);
        flowExecutionLock = flowExecutionRepository.getLock(flowExecutionKey);
        flowExecutionLock.lock();
        FlowExecution execution = flowExecutionRepository.getFlowExecution(flowExecutionKey);
        flowExecutionRepository.removeFlowExecution(execution);
    } catch (FlowExecutionRepositoryException e) {
        log.warn("Could not find flow in repository with id ${executionKey} " + e.getMessage());
    } catch (NullPointerException e) {
        log.warn("Could not find flow in repository with id ${executionKey} " + e.getMessage());
    } finally {
        if (flowExecutionLock != null) {
            flowExecutionLock.unlock();
        }
    }
    

    思想吗

    有没有人有任何想法我怎么能这样做。在会话中交换两个流(其中一个是不完整的)应该是可能的吗?我想要一个干净的解决方案,而不是自己调整流程。

1 个答案:

答案 0 :(得分:0)

我似乎找到了一个解决方法,在g:link标签中(我创建了流程的链接)我并不总是养成添加动作“index”的习惯,就像在Grails中默认那样去但是当我添加它时,我能够无缝地在流之间交换。

<g:link absolute="true" controller="contact_us" action="index">

我不确定是否从流存储库中删除了旧流。我试过在两个流程之间点击70-80次,似乎没有任何东西出现在日志中。如果我确实遇到任何问题,我会回来更新答案。