Выполнить метод перед загрузкой страницы JSF

Я извлекаю язык пользователя из базы данных. Когда пользователь входит в систему, страница должна отображаться на этом языке. Так что для этого я использую приведенный ниже код в JSF

    <f:metadata>
       <f:event type="preRenderView" listener="#{language.preferredLocale}"/>
    </f:metadata>
    <ui:define name="content_pane">
    <f:view locale="#{language.localeCode}"/>
    </ui:define>

    //language bean code is
    public void preferredLocale(ComponentSystemEvent e){
        // code to retrieve locale for particular user              
    }

Но приведенный выше код не работает для установки локали на странице загрузки. Есть ли другой способ установить локаль на странице загрузки?

2 ответа

Это действительно не правильный путь. Тогда уже слишком поздно. Вы должны убедиться, что <f:view locale> уже установлен правильно.

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

@ManagedBean
@RequestScoped
public void LoginBean {

    @ManagedProperty("#{localeBean}")
    private LocaleBean localeBean;

    public void submit() {
        User user = userService.find(username, password);

        if (user != null) {
            localeBean.setLanguage(user.getPreferences().getLanguage());
            // ...
        }

        // ...
    }

    // ...
}

Использовать этот

<f:view beforePhase=#{bean.viewBeforePhase} >
Другие вопросы по тегам