0

アプリの 1 つで国際化の問題に少し苦労しています。話は次のようになります。

レコードを表示するデータテーブルと、フィルタリングするデータテーブルの列を選択するための selectOneMenu があります。selectOne には、DataRefresh 時にバッキング Bean の実際のロケールに従って入力される SelectItems が供給されます。

これで、ユーザーがロケールを変更すると、selectOne のコンテンツは、ページが再レンダリングされるまで古いロケールのままになります。これは非常に論理的であり、予想されます。

もちろん、私はそれを変えたいと思っています。

そこで、再レンダリングせずに変更できるようにするために、languageFile エントリへの参照を含む selectItems を使用する独自の selectOne を作成してみました。

これが私が試したものです

<select id="j_id5:filterSelector" name="j_id5:filterSelector" size="1"> 
    <c:forEach var="item" items="#{gridBean.filterFields}">
        <option value="#{item.Value}">#{msg[item.Label]}</option>
    </c:forEach>
</select>

悲しいことに、JSF はアイテムに Label プロパティまたは Value プロパティがないことを教えてくれましたが、これはほとんど信じられません。;)

この方法でこのプロパティにアクセスする方法を知っている人はいますか?

4

3 に答える 3

1

あなたが書くべきだと私には思えます:

#{item.value}

の代わりに#{item.Value}、標準の JavaBeans 慣習として、プロパティにgetXyz()getter を使用しxyzます。

valueChangeListenerまた、ロケールを選択するために UI コンポーネントに を提供し、その内部で、そのロケールの選択項目のラベルを入力してみませんか。そうすれば、標準f:selectItemsタグを使用できます。

于 2009-08-14T17:02:25.500 に答える
0

コマンドリンクがページを再レンダリングして、必要なことを自動的に行うようにすることもできます。これが要件を満たしているかどうかはわかりません。:)

于 2009-08-18T20:29:21.877 に答える
0

フィルターフィールドを2回保存することで問題を解決しました。言語ごとに 1 回 - レンダリングされる実行時の決定。いいものではありませんが、うまくいきます。changeListener を実行できませんでした...

于 2009-08-18T09:04:13.610 に答える