Jsf 更改本地不影响f:convertDateTime

Jsf 更改本地不影响f:convertDateTime,jsf,jsf-2,internationalization,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" rend

所以我有一个国际化的网站。在我的标题上有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'}"/>
这些按钮很好用。除非我的日期在显示之前已转换,例如:

<h:outputText value="#{events.date}">
    <f:convertDateTime locale="#{language.language}" type="date" dateStyle="medium" timeZone="EDT" />
</h:outputText>

编辑:此
h:outputText
嵌套在
h:dataTable
中。我想我得提一下

当我更改语言时,所有标签都会切换,没有问题。没有改变的是日期。如果我随后刷新页面,日期将更改为正确的区域设置。这就好像在更改区域设置时转换滞后一样。我假设这与生命周期或类似的东西有关,但似乎无法弄清楚这一点。我的印象是,在重新加载页面之前,区域设置已更改。。。显然不是100%正确


如果调用FacesContext.getCurrentInstance().getViewRoot().setLocale,则使用JSF2.0

<f:convertDateTime locale="#{language.language}" type="date" dateStyle="medium" timeZone="EDT" />

试一试

<f:convertDateTime type="date" dateStyle="medium" timeZone="EDT" />


有效。。。除了如果我使用“fr_CA”这样的语言环境,它不会识别它(例如,我得到了
2012-13-25
)。区域设置“fr”将起作用。有没有办法扩展此转换所接受的区域设置?我强烈建议使用
dateStyle=“default”
而不是medium。如果您计划添加更多的语言(所有语言都已经有两种以上),您实际上不知道对于最终用户来说什么是最好的样式。默认值会给你这个。
<f:convertDateTime type="date" dateStyle="medium" timeZone="EDT" />