Spring webflow:从决策状态继续进入“下一个”状态

时间:2014-02-21 15:26:08

标签: spring spring-webflow

我的情况是这样的:我需要在多个流程中实现一种授权检查。现在,我的一个流程看起来像这样:

<flow parent="myparent-flow">
    <decision-state id="checkAuthorization">
        <if test="bean.notAuthorized" 
            then="redirectToSomePage"
            else="view1" />
    </decision-state>
    <view-state id="view1" />
    <!-- ... -->
</flow>

我需要为许多流实现相同的授权检查,虽然我可以将相同的逻辑复制粘贴到我真正想要的任何地方,如果可能的话,将它放在父流本身中,这已经习惯了在每个流程的开始执行一些逻辑。

这里的问题是决策状态中的else-class。由于它是许多子流的父流,因此它不会知道子流中第一个状态的名称。我想这样使用它,它会以某种方式继续执行流中的下一个状态,它存在于子流中。我的最佳解决方案是这样的:

<flow> <!-- flow name = myparent-flow -->
    <decision-state id="checkAuthorization">
        <if test="bean.notAuthorized"
            then="redirectToSomeFlow"
            else="continueExecutionInChildFlow" />
    </decision-state>
    <end-state id="redirectToSomeFlow" view="flowRedirect:someFlow" />
</flow>

然后将其定义为所有流中的父流,以便我不必复制此逻辑。是否有可能用Spring做这样的事情?

1 个答案:

答案 0 :(得分:2)

实现它的一种可能方法是通过在特定流上设置变量,然后将此变量用于最终状态重定向,例如:

<if test="bean.notAuthorized" 
    then="redirectToSomeFlow" 
    else="${conversationScope.resultView}" />

可以使用以下方法设置变量:

<set name="conversationScope.resultView" value="'viewName'" />