1

PrimeFaces で開発されたいくつかのウィジェットを含む複雑な jsf ページがあります。これまでのところ、アプリケーションは完全に ajax 化されています。つまり、送信はありませんが、すべてのイベントと更新は Ajax の動作によって処理されます (これは必須ではありませんが、あると便利な機能です)。SelectOneMenu言語の切り替えも行いました:

<h:form>
    <p:panelGrid columns="2" >
        <h:outputText value="#{msgs.SelectLanguage}" />
        <p:selectOneMenu value="#{languageSwitcher.selectedLanguage}" >
            <f:selectItems value="#{languageSwitcher.languages}" ></f:selectItems>
        </p:selectOneMenu> 
    </p:panelGrid>
</h:form>

スイッチャーはうまく機能します。私の問題は、言語が選択されたときに翻訳されたメッセージをリロードする方法です。

これらのオプションを試しました:

オプション1

selectOneMenu 内で ajax を更新すると、次のようになります。

<p:ajax update="myFormsTobeUpdated" ></p:ajax>

これはうまく機能し、Ajax であるため推奨されるソリューションですが、

編集済み

このソリューションは、PrimeFaces TabView のタブ タイトルを ajax 更新しません。タブ タイトルを翻訳する必要があるため、これは問題です。

オプション 2

Javascript でページを完全にリロードします。私はこれを試しましたが、うまくいきません(理由がわからない):

<p:selectOneMenu value="#{languageSwitcher.selectedLanguage}" onchange="window.location.reload()" >

オプション 3

ここで説明されているように、Java でページを完全にリロードします: https://stackoverflow.com/a/1821708/870122 (正直なところ、まだ試していませんが、すぐに試してみます!)

どんな提案でも大歓迎です。

4

3 に答える 3

4

少なくとも PrimeFaces 3.2 を使用している場合は、次を使用できます

<p:ajax update="@all" />

ビュー全体を更新します。このバージョンより前は、@allはサポートされていませんでした。

于 2012-04-18T12:29:55.660 に答える
-1

オプション 1では PrimeFaces TabView のタブ タイトルを ajax 更新できないため、JavaScript を使用してページを完全にリロードするオプション 2 に切り替えました

それを機能させるコードは次のとおりです。

<h:form id="selectLanguage">
    <p:panelGrid columns="2">
        <h:outputText value="#{msgs.SelectLanguage}" />
        <p:selectOneMenu value="#{languageSwitcher.selectedLanguage}" onchange="document.getElementById('selectLanguage').submit();" >
            <f:selectItems value="#{languageSwitcher.languages}" ></f:selectItems>
        </p:selectOneMenu> 
    </p:panelGrid>
</h:form>
于 2012-04-19T18:43:31.047 に答える