Сделать недействительным снимок предыдущей страницы в Spring Webflow - PullRequest
1 голос
/ 15 января 2020

Я использую Spring Webflow и перенаправляю с view-state на action-state на view-state. Теперь, когда пользователь находится на втором view-state, я не хочу, чтобы пользователь мог нажимать кнопку возврата браузера и go на предыдущую страницу.

Я обнаружил, что history="invalidate" может использоваться для аннулирования снимка предыдущей страницы. Я пытался использовать его в transition. Однако, это не работает (кнопка возврата браузера не отключена).

Итак, что я могу добавить к своим состояниям веб-потока, чтобы отключить кнопку «Назад» и позволить пользователю использовать только элементы управления навигацией, предусмотренные на странице?

Спасибо

1 Ответ

1 голос
/ 17 января 2020

В какое состояние вы добавили атрибут history?

Во-первых, <action-state> не поддерживает его (https://jira.spring.io/browse/SWF-1481).

Вы должны добавить его к первому переходу <view-state> , Что, если бы вы хотели сделать это условно только на том, что произошло в <action-state>, было бы недостаточно. Мы закончили тем, что создали Java код для вызова из нашего <action-state> метода, чтобы сделать это.

/**
 * Invalidate WebFlow history. For use in action-state, where the transition element is not able
 * to specify to invalidate history.
 */
public static void invalidateHistory() {
    RequestContext context = RequestContextHolder.getRequestContext();

    synchronized(context.getFlowExecutionContext()) {
        DefaultFlowExecutionRepository r =
                (DefaultFlowExecutionRepository)
                ((FlowExecutorImpl)
                    context.getActiveFlow().
                    getApplicationContext().
                    getBean(FlowExecutor.class)).getExecutionRepository();
        r.removeAllFlowExecutionSnapshots((FlowExecution)context.getFlowExecutionContext());
    }
}

(Также обратите внимание, что «invalidate» делает недействительным состояние и все перед ним. Если вы хотите только чтобы предотвратить это единственное состояние, вместо этого вы бы использовали "сбросить". https://docs.spring.io/spring-webflow/docs/current/reference/html/views.html#view -backtracking )

...