Jsf 更改本地不影响f:convertDateTime
所以我有一个国际化的网站。在我的标题上有2个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
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" />