0

2 つの tr:selectOneChoice コンポーネントがあり、それぞれに独自の valueChangeListener メソッドがあります。問題は、ドロップダウン ボックス 1 の値を変更すると、予想されるアクション メソッド 1 が呼び出されることです。

しかし、ドロップダウン ボックス 2 の値を変更すると、アクション メソッド 1 とアクション メソッド 2 が順番に呼び出されます。これは非常に奇妙で、アクション メソッド 1 はまったく呼び出されません。最悪の部分は、同じページにある別のボタンをクリックしても、両方が両方のアクション メソッドを順番に呼び出すことです。

MyFaces、Facelets、Trinidad を使用しています。どうもありがとうございました。

4

1 に答える 1

0

valueChangeListener、送信された値が、検証フェーズ中に関連付けられたゲッターによって返された値と異なる場合にのみ呼び出されます。特定の問題の最も一般的な原因の 1 つは、Bean がリクエスト スコープであり、初期値が保持されていないことです。

JSF 2.0 を使用していた場合は、Bean をviewスコープ内に配置して、同じビューの直接の後続のリクエストで保持されるようにする必要があります。しかし、まだ 1.x を使用している場合、最も簡単な修正は、Bean をセッション スコープに配置することです。ただし、これには注意点もあります。ユーザーが同じブラウザ セッションの異なるタブ/ウィンドウで同じページを開くと、互いに干渉します。最善の解決策は、トマホークの を使用すること<t:saveState>です。ドロップダウンのあるフォームのあるページのどこかに次の行を挿入します。

<t:saveState value="#{bean}" />

このようにして、Bean は同じビューの後続のリクエストで保持され、新しい JSF 2.0viewスコープのように機能します。

于 2010-12-30T12:57:37.220 に答える