1

アクションmathodでロケールを変更した後、ページをリロードする必要があるため、nullを返しますが、ロケールを変更するためのリンクを最初にクリックしても、日付のフィールドは変更されません。MyFacesを使用しています

ユーザーがロケールを設定できるページがありますが、ロケールを変更した後、ロケールを変更するためのリンクを2回押した直後に、希望する日付の形式を取得できません。この投稿からローカリゼーションに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は別の形式になっています。次の記事「JSF2.0の使い方」を読みました。–フォームの外部にコンポーネントをレンダリングする設定する必要があることを理解しているので、フォームの名前なしで<h:form id="listForm" prependId="false">elementIdを設定できますが、エラーが発生します。<f:ajax/>javax.faces.FacesException - Component with id::listGroupId:dateField not found

そして、私は次のことを発見しました。renderで指定された要素は、クライアント側のHTMLDOMツリーにすでに存在している必要があります。それが私がこの問題を抱えている理由かもしれません

助けてください...日付のパターンが2回目からしか変更されないのはなぜですか?

4

1 に答える 1

1

私は以下をお勧めします

1)一般に(そのメソッドが言語属性を設定する内部で)変更setLanguagechangedLanguageます。アクション属性でセッターを使用するのは悪い方法であり、一般に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>
于 2012-10-15T14:19:11.627 に答える