我刚刚尝试根据这篇文章"使用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);
}