更改本地不会影响f:convertDateTime

时间:2012-03-27 17:00:58

标签: jsf jsf-2 internationalization

所以我有一个国际化的网站。在我的标题上,我有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

1 个答案:

答案 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" />