所以我有一个国际化的网站。在我的标题上,我有2 h:commandLinks
,其中只有一个显示取决于当前的区域设置。
<h:commandLink action="#{language.languageToFrench}" value="Français" rendered="#{language.language ne 'fr'}"/>
<h:commandLink action="#{language.languageToEnglish}" value="English" rendered="#{language.language eq 'fr'}"/>
它连接到一个如下所示的支持bean:
private static final long serialVersionUID = 1L;
private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
public Locale getLocale() {
return locale;
}
public String getLanguage() {
return locale.getLanguage();
}
//value change event listener
public void languageToFrench(){
locale = Locale.CANADA_FRENCH;
FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.CANADA_FRENCH);
}
public void languageToEnglish(){
locale = Locale.ENGLISH;
FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.ENGLISH);
}
这些按钮工作正常。除非我有一个在显示之前转换的日期,例如:
<h:outputText value="#{events.date}">
<f:convertDateTime locale="#{language.language}" type="date" dateStyle="medium" timeZone="EDT" />
</h:outputText>
编辑:此h:outputText
嵌套在h:dataTable
中。以为我不得不提这个。
当我更改语言时,所有标签都没有问题。没有改变的是日期。如果我然后刷新页面,日期将更改为正确的区域设置。就像在更改区域设置时转换是laggin一样。我假设这与生命周期或类似的东西有关,但似乎无法解决这个问题。我的印象是在重新加载页面之前更改了语言环境...显然不是100%正确。
使用JSF 2.0
答案 0 :(得分:1)
如果你调用FacesContext.getCurrentInstance()。getViewRoot()。setLocale你不需要
<f:convertDateTime locale="#{language.language}" type="date" dateStyle="medium" timeZone="EDT" />
尝试
<f:convertDateTime type="date" dateStyle="medium" timeZone="EDT" />