2013-01-05 10 views
7

valueChangeListenerに問題があります。私はWeblogic 6.0でJSF 1.2を使用しています。valueChangeListenerメソッドで更新されたモデル値を取得する方法は?

私はページの上に名前1と名前2という名前の2つのラジオボタンがあります。 Name1をクリックすると、ラジオボタンの下にName1の詳細(約30フィールドあり)が表示され、Name2をクリックするとName2の詳細が表示されます。これで、ユーザーはクリックされた名前付きの詳細を更新できます。例えばユーザーはName1をクリックしてアドレスフィールドを変更し、Name2をクリックしてName2の年齢を変更します。ユーザーがName1をクリックすると、新しい値でアドレスが更新されて表示され、ユーザーがName2をクリックすると、年齢が更新されます。

変更イベントの古い値と新しい値が必要なので、私はvalueChangeListenerを使用してそれに取り組んでいます。問題は、VALIDATIONフェーズの最後にvalueChangeListenerが呼び出されるため、valueChangeListenerメソッドのName1フィールドの更新されたアドレスが取得されないということです。誰かが回避策を得るために私を助けることができますか? valueChangeListenerのは、検証フェーズの終了時に呼び出されるよう

答えて

14

、私は

valueChangeListenerの方法で名1フィールドの更新されたアドレスを取得しておりませんので、INVOKE_ACTION相にイベントをキューアクション(リスナー)メソッドのように動作することを示します。

public void valueChangeListenerMethod(ValueChangeEvent event) { 
    if (event.getPhaseId() != PhaseId.INVOKE_APPLICATION) { 
     event.setPhaseId(PhaseId.INVOKE_APPLICATION); 
     event.queue(); 
     return; 
    } 

    // Do your original job here. 
    // It will only be entered when current phase ID is INVOKE_APPLICATION. 
} 

INVOKE_ACTIONとして相の実行UPDATE_MODEL_VALUES後、更新されたモデルの値は、「通常の方法」だけで利用できるようになります。

+1

ありがとうございますBalusC。できます。私がJSFのいくつかの問題を抱えているときは、常にstackoverflowであなたの提案を探しています。あなたの答えは非常にシンプルで、わかりやすいものです。再度、感謝します。 – Suman

+1

ようこそ。 – BalusC

+0

質問には直接接続しませんが、誰かがこのソリューションを使用する場合はさらに詳しい情報があります。このフィールドに他のValueChangeListenersが登録されている場合、それらも2回トリガーされることに注意してください。私はその静かな特定のシナリオだと思うが、とにかく知りたい。 – whitesite