JSF: Как выполнять некоторый код при каждом выполнении правила навигации?

Есть ли способ, которым я могу выполнить код всякий раз, когда navigation rule выполнен. В основном то, что я пытаюсь сделать, это иметь JourneyTracker bean-компонент, который будет содержать текущее состояние путешествия (например, текущую страницу, на которой находится пользователь).

1 ответ

Решение

Вы можете использовать обычай NavigationHandler за это. По сути, просто расширьте этот абстрактный класс следующим образом:

public class MyNavigationHandler extends NavigationHandler {

    private NavigationHandler wrapped;

    public MyNavigationHandler(NavigationHandler wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public void handleNavigation(FacesContext context, String from, String outcome) {
        // Do your job here. Just check if "from" and/or "outcome" matches the desired rule.

        wrapped.handleNavigation(context, from, outcome); // Important! This will perform the actual navigation.
    }

}

Чтобы запустить его, просто зарегистрируйте его следующим образом в faces-config.xml:

<application>
    <navigation-handler>com.example.MyNavigationHandler</navigation-handler>
</application>
Другие вопросы по тегам