我的情况是这样的:我需要在多个流程中实现一种授权检查。现在,我的一个流程看起来像这样:
<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做这样的事情?
答案 0 :(得分:2)
实现它的一种可能方法是通过在特定流上设置变量,然后将此变量用于最终状态重定向,例如:
<if test="bean.notAuthorized"
then="redirectToSomeFlow"
else="${conversationScope.resultView}" />
可以使用以下方法设置变量:
<set name="conversationScope.resultView" value="'viewName'" />