在使用返回 null 的操作中更改语言环境后,我道歉页面应该重新加载,但在第一次单击更改语言环境的链接后,带有日期的字段不会改变。我使用 MyFaces
我有一个页面,用户可以在其中设置语言环境,并且在更改语言环境后,我无法在第二次推送更改语言环境的链接后获得所需的日期格式。我从这篇文章中使用 bean 进行本地化
我不明白为什么在
<h:outputText value="#{newsVar.date}">
<f:convertDateTime pattern="#{msg['date.pattern']}" />
</h:outputText>
!!!!已编辑!!! 当我在 mainLayout.xhtml 中使用构面时,我在获取 dataField 的 id 时遇到了一些问题
<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 包含在 commandLink
<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 的形式不同。我阅读了下一篇文章How to JSF 2.0: – 在表单之外渲染组件我知道我应该设置<h:form id="listForm" prependId="false">
然后我可以在没有表单名称的情况下设置 elementId<f:ajax/>
但我得到错误javax.faces.FacesException - Component with id::listGroupId:dateField not found
。
我发现:在渲染中指定的元素必须已经存在于客户端 HTML DOM 树中。可能这就是为什么我有这个问题
请帮帮我...为什么日期模式仅从第二次更改?