2010-12-30 8 views
0

私は2つのtr:selectOneChoiceコンポーネントを持ち、それぞれ独自のvalueChangeListenerメソッドを持っています。問題は、ドロップダウンボックス1から値を変更するときに、期待されるアクションメソッド1を呼び出すことです。2 tr:selectOneChoice ValueChangeListenersは同じアクションメソッドを呼び出す

しかし、ドロップダウンボックス2から値を変更すると、アクションメソッド1とアクションメソッド2が順番に呼び出されます。これは本当に奇妙です。アクションメソッド1を呼び出すべきではありません。最悪の部分は、たとえ同じページにある異なるボタンをクリックしても、どちらも両方のアクションメソッドを順番に呼び出していることです。これは本当に悪いですし、それを説明する方法もありません。

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

+0

私たちにfaceletsコードを見せてください。 –

答えて

0

valueChangeListenerは、サブミットされた値が、検証段階で関連ゲッターから返された値と異なる場合にのみ呼び出されます。特定の問題の最も一般的な原因の1つは、Beanが要求スコープであり、初期値が保持されていないことです。

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

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

Beanは新しいJSF 2.0 viewスコープのような役割を果たし同じビュー、上の後続の要求に保持されますこの方法です。

+0

こんにちは、本当にありがとうございました。なぜ私の値によってリスナーメソッドが呼び出されるように変更されたのか理解していますが、独自のメソッドを呼び出すだけで、他の値では同じ順序でリスナーメソッドが変更されることはありません。同じページ上で自分のボタン(値の変更リスナーとは何の関係もない)をクリックすると、さらに悪いことに、これらのボタンは、値の変更されたリスナーメソッドとそれ自身のアクションメソッドの両方を同じ順序で呼び出します。私はJSF 1.xを使用しています。ありがとうございます。 –

+0

前述したように、valuechangeristenerメソッドは、送信された値が初期値と異なる場合に呼び出される** only **です。後続の要求で初期値が変更されないようにする必要があります。それはJavascriptほどそうではありません。 – BalusC

関連する問題