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

一些关于Java指针和JSF应用程序中更改语言环境的基本知识,java,jsf,jakarta-ee,Java,Jsf,Jakarta Ee,我只是尝试基于本文实现JSF国际化-“”并发现了一些奇怪的东西。在这个bean中使用代码更改语言环境是否正确 @ManagedBean @SessionScoped public class LocaleBean { private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale(); public Locale getLocale() { return loc

我只是尝试基于本文实现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
必须是viewRoot对象中指向实际Locale对象的指针,但这个方法在我身上不起作用。相反,当我将
setLanguage(String language)
方法更改为

public void setLanguage(String language) {
        FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(language));
    }
它开始起作用了。现在我想知道错误在哪里?@BulusC代码有什么问题?也许我做错了什么,也许我忘记了什么?
当我调试时,我发现
私有语言环境
和viewRoot中的语言环境对象是不同的对象。

事实上,代码缺少您发布的行。从BalusC回答的问题:,您可以检查
setLanguage
的代码(代码取自BalusC的答案,而不是我的):


非常感谢,但现在我想知道为什么巴卢斯克没有在文章中修改他的代码:(这么难吗:(@Anatoly)更让我担心的是其他人是如何发布的,效果很好=\
public void setLanguage(String language) {
    locale = new Locale(language);
    //this is the line you added
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}