jsf 2.0 f:convertDateTime for util.使用 .properties 中的自定义日期模式的



在操作中更改区域设置后,mathod 返回 null,因为我道歉页面应该重新加载,但在第一次单击更改区域设置的链接后,带有日期的字段不会更改。我使用我的面孔

我有一个用户可以设置区域设置的页面,更改区域设置后,在第二次推送用于更改区域设置的链接后,我无法获得所需的日期格式。我在这篇文章中使用 bean 进行本地化

本地化文章

我不明白为什么在

<h:outputText value="#{newsVar.date}">
<f:convertDateTime pattern="#{msg['date.pattern']}" />
</h:outputText>

!!!编辑!!!我在获取数据字段的 id 时遇到了一些问题,我在主布局中使用了分面.xhtml

<f:view locale="#{localeManager.language}">
<div id="wrapper">
<div class="header">
<ui:insert name="header">
<ui:include src="/pages/template/commonHeader.xhtml" />
</ui:insert>
</div>
<div class="content_container">
<ui:insert name="content" />
</div>
</div> 
</f:view>

包含 commonHeader 命令链接

<ui:composition>
<h:form>
<h1>
<h:outputText value="#{msg['header.text']}" />
</h1>
<div class="lang_selector">             
<h:commandLink action="#{localeManager.changeLanguage('ru')}"
value="#{msg['header.language.ru']}">
<!--                    <f:ajax render=":listGroupId:dateField" />-->
</h:commandLink>
<h:commandLink action="#{localeManager.changeLanguage('en')}"
value="#{msg['header.language.en']}">
<!--                    <f:ajax render=":listGroupId:dateField" />-->
</h:commandLink>
</div>
</h:form>
</ui:composition>

在当前页面中,我有下一个

<ui:composition template="/pages/layouts/mainLayout.xhtml">
<ui:define name="content">
<f:event type="preRenderView" listener="#{news.showNews}" />
<h:form id="listForm" prependId="false">
<h:panelGroup id="listGroupId">             
<ui:repeat var="newsVar" value="#{news.newsList}">
<div class="news_item">
<div class="news_title">
<h1>
<h:outputText value="#{newsVar.title}" />
</h1>
<div class="news_date">
<h:outputText id="dateField" value="#{newsVar.date}">
<f:convertDateTime pattern="#{msg['date.pattern']}" />
</h:outputText>
</div>

如您所见,尝试获取"dateField"的id,但该id的形式不同。我阅读了下一篇文章 如何 JSF 2.0: – 在表单之外渲染组件 我知道我应该设置<h:form id="listForm" prependId="false">然后我可以在没有表单名称的情况下在<f:ajax/>中设置 elementId,但我收到错误javax.faces.FacesException - Component with id::listGroupId:dateField not found.

我发现:渲染中指定的元素必须已经存在于客户端 HTML DOM 树中。可能这就是我遇到这个问题的原因

请帮帮我... 为什么日期的模式只从第二次更改?

我会推荐以下内容

1)将setLanguage更改为changedLanguage(在该方法中设置语言属性) 一般来说,在 Action 属性中使用 setter 是一个不好的做法,而一般来说在 actionMethods 中使用 get/set 前缀

2) 添加f:ajax

<h:commandLink action="#{localeManager.changedLanguage('en')}" value="#msg['header.language.en']}">
<f:ajax render="dateField"/>
</h:commandLink>

3)将h:outputText更改为

<h:outputText id="dateField" value="#{newsVar.date}">
<f:convertDateTime pattern="#{msg['date.pattern']}" />
</h:outputText>

最新更新