在加载JSF页面之前执行该方法

时间:2013-07-27 14:45:11

标签: spring jsf primefaces localization facelets

我正在从数据库中检索用户的语言环境。每当用户登录时,页面应显示在该特定语言上。所以对于这个我在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              
    }

但上面的代码无法在页面onload上设置语言环境。有没有其他方法我可以在页面加载上设置区域设置?

2 个答案:

答案 0 :(得分:1)

这确实不是正确的方法。现在为时已晚。您需要确保<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());
            // ...
        }

        // ...
    }

    // ...
}

答案 1 :(得分:0)

使用此

<f:view beforePhase=#{bean.viewBeforePhase} >