2013-05-08 3 views
0

Сценарий таков:Spring WebFlow - запрос на отмену

a имеют некоторые состояния представления. , когда объект в моем разговореScope находится в определенном состоянии (например, не null), я хочу, чтобы пользователь не мог вернуться. , вернувшись, я имею в виду: эфир нажимает кнопку браузера или манипулирует параметром исполнения.

один из способов предотвращения, будет игнорировать запрос.

я попытался реализовать FlowExecutionListenerAdapter, но это имеет доступ только к requestContext, view и viewState

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

ответ

1

хорошо я решил это довольно грязный, но я решил его:

я написал FlowExecutionListenerAdapter реализацию, которая выбрасывает Exception в resuming фазе, если матч критерии.

@Override 
public void resuming(RequestContext context) 
{ 
    if (!backwardNavigation) 
    { 
     if (!context.getFlowExecutionContext().getActiveSession().getState().getId() 
       .equals(attributeConfigurer.getFinishViewState())) 
     { 
      throw new ConfirmationFinishRedirectException(); 
     } 

    } 
} 

и я поймаю исключение с переходом в состоянии, в котором оно выбрано.

<transition on-exception="example.ConfirmationFinishRedirectException" to="finishState" bind="false" validate="false" history="discard"/> 

я получил идею для этого решения с этого сайта: SpringForum - Thread: FlowExecutionListener - how to intercept and redirect user

0

что касается установки history="discard" на вашем транзисторе?

+0

или '«аннулирует»' – dbreaux

+0

я пытался, что до моего поста. discard просто удаляет последний моментальный снимок и делает недействительным удаление всех снимков извлечения. поэтому возвращение назад исключает исключение –

+1

Вы сказали «предотвратить», что делают эти подходы. Я понимаю, почему вы предпочитаете свое решение, но, учитывая то, что было опубликовано в вопросе, я считаю несправедливым, чтобы снизить этот ответ (кто бы это ни сделал). (Заметьте, это не мой ответ.) – dbreaux