10

valueChangeListener に関する問題で立ち往生しています。Weblogic 6.0 で JSF 1.2 を使用しています。

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

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

4

2 に答える 2

18

valueChangeListenerはVALIDATIONフェーズの最後に呼び出されるため、valueChangeListenerメソッドのName1フィールドの更新されたアドレスを取得していません。

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されると、更新されたモデル値は「通常の方法」で利用できるようになります。

于 2013-01-05T14:18:03.277 に答える