Webflow On-Render / On-Entry异常仍然运行退出方法

时间:2016-08-17 17:54:16

标签: spring-webflow spring-webflow-2

我在流程定义中定义了以下内容:

<view-state id="switchboard" view="switchboard2" model="reservationForm">
    <on-entry>
        <evaluate expression="flowController.enterSwitchboard(flowRequestContext)" />
        <evaluate expression="flowController.populateActionFlags(flowRequestContext)" />
    </on-entry>
    <transition on="prev" to="switchboardAction" validate="false" />
    <transition on="*" to="switchboardAction" />
    <transition on-exception="java.lang.Exception" to="systemErrorView" />
    <on-exit>
        <evaluate expression="flowController.exitSwitchboard(flowRequestContext)" />
        <evaluate expression="flowController.clearWebflowForms(flowRequestContext)" />
    </on-exit>
</view-state>

正在发生的事情是populateActionFlags()方法中的错误(在此特定情况下为IllegalArgumentException,但也可能是其他异常),但exitSwitchboard()方法仍在触发。在此之后,clearWebflowForms()方法抛出异常,因为模型由于先前的异常而搞砸了。这导致无限循环。

我需要的是:当发生异常时,绕过出口退出方法并转到部分中定义的错误状态(“systemErrorView”)。不要过去,不要收200美元。

Webflow版本是2.4.1。

有人可以帮忙吗?

杰森

2 个答案:

答案 0 :(得分:1)

尝试在流程中使用全局转换:

<global-transitions>
    <transition on-exception="java.lang.Exception" to="systemErrorView"/>
</global-transitions>

请记住,您的所有流量状态都会共享此信息。

如果您不希望共享它,可能需要为此创建自定义例外。

答案 1 :(得分:1)

on-exit将在具有intent的视图状态结束时执行。声明它意味着与java中的finally块相同。

在您的情况下,您可能想要这样做

<transition on="prev" to="switchboardAction" validate="false" >
    <evaluate expression="flowController.exitSwitchboard(flowRequestContext)" />
    <evaluate expression="flowController.clearWebflowForms(flowRequestContext)
</transition>
<transition on="*" to="switchboardAction" >
    <evaluate expression="flowController.exitSwitchboard(flowRequestContext)" />
    <evaluate expression="flowController.clearWebflowForms(flowRequestContext)
</transition>

这会在每次转换时执行evaluate语句,但不会在异常时执行。