2016-08-17 6 views
1

У меня есть следующий определенный в моем определении потока:WebFlow On-Рендер/On-Входа Исключение по-прежнему работает On-Exit Метода

<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> 

То, что происходит в том, что ошибка (в данном конкретном случае, IllegalArgumentException, но могут быть и другими исключениями) в методе populateActionFlags() выполняется ocurring, но метод exitSwitchboard() все еще запускается. После этого метод clearWebflowForms() выдает исключение, потому что модель завинчивается в результате предыдущего исключения. Это вызывает бесконечный цикл.

Что мне нужно: когда возникает исключение, обходите методы on-exit и переходите к состоянию ошибки («systemErrorView»), определенному в разделе. Не проходите мимо, не собирайте 200 долларов.

Версия Webflow - 2.4.1.

Может ли кто-нибудь помочь?

Джейсон

ответ

1

попробуйте использовать глобальный переход в вашем потоке:

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

иметь в виду, что это будет общим для всех состояний вашего потока.

Если вы не хотите, чтобы он был общим, вы можете создать для него специальное исключение.

+0

Пробовал, не повезло. – Jason

+0

Что случилось, когда вы пробовали? – rptmat57

+0

вы также можете попробовать с помощью и посмотреть, не достаете ли вы где-нибудь – rptmat57

1

on-exit должно быть выполнено в конце состояния представления с намерением. Объявление этого означает то же самое, что и блок finally в java.

В вашем случае вы можете сделать это

<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> 

Это выполняет оценку заявлений на каждом переходе, а не на исключения.

 Смежные вопросы

  • Нет связанных вопросов^_^