关于Java指针和在JSF应用程序中更改语言环境的一些基本知识



我刚刚尝试根据这篇文章"使用UTF-8编码的属性文件进行JSF国际化"实现JSF国际化,但发现了一些奇怪的事情。在这个bean中使用代码来更改语言环境是正确的方法吗?

@ManagedBean
@SessionScoped
public class LocaleBean {
    private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
    public Locale getLocale() {
        return locale;
    }
    public String getLanguage() {
        return locale.getLanguage();
    }
    public void setLanguage(String language) {
        this.locale = new Locale(language);
    }
}

正如我所理解的,Java private Locale locale必须是从viewwroot对象指向实际Locale对象的指针,但这个方法对我不起作用。相反,当我将setLanguage(String language)方法改为

public void setLanguage(String language) {
        FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(language));
    }

它开始工作了。现在我想知道错误在哪里?@BulusC代码有什么问题?也许我做错了什么,也许我忘记了什么?当我调试时,我看到private Locale locale和来自viewwroot的locale对象是不同的对象。

确实,代码缺少您发布的那一行。从这个问题:JSF中的本地化,如何记住每个会话而不是每个请求/视图所选择的区域设置,由BalusC回答,您可以检查setLanguage的代码(代码取自BalusC的回答,而不是我的):

public void setLanguage(String language) {
    locale = new Locale(language);
    //this is the line you added
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}

相关内容

  • 没有找到相关文章

最新更新