1

入力型フィールド内に、 jspのプロパティfooの型の変数 (lets call ) にバインドする値があります。のセッターとゲッターがあり、この入力にも登録されています。そのフィールドの属性は true に設定されます。ユーザーが入力をクリアして次のフィールドに移動すると、内部のコードが呼び出され、のがnull になります。どうすればこれを防ぐことができますか?doublevaluefooValueChangedListenerautosubmitvalueChangedListenernewValueValueChangedEvent

これをセッターメソッドから処理しようとしましたが、セッターが呼び出されず、valueChangedListener最初に呼び出されているようです。ユーザーが編集した値をコンポーネントに入力するためにセッターを最初に呼び出す必要があり、その後 ValueChangedListener のみが起動されると仕様に記載されていませんか?

PS: 入力として ADF RichInputText を使用していますが、これは ADF ではなく、コア JSF 機構に関連していると思います。したがって、ADF の質問としてタグ付けしません。

4

1 に答える 1

1

新しい値を検証する必要がありますが、古い値には興味がありません。

その場合、 AvalueChangeListenerはジョブにとって不適切なツールです。通常の を使用しますValidator。空の必須フィールドを検証するには、 を使用しますrequired="true"。空のフィールドでカスタム バリデータをスキップするには、次のコンテキスト パラメータを に追加しますweb.xml

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>false</param-value>
</context-param>

唯一の欠点は、@NotNull/ @NotBlankJSR303 Bean の検証もスキップすることですが、いずれにせよそれを使用していなくても害はありません。


また、セッターがの前に呼び出されないのはなぜvalueChangeListenerですか?

そうしないと古い値が失われ、値変更リスナーの目的が無効になるためです。


バリデーターは valueChangedListener の前に実行されますか? 検証に合格した場合にのみ、ValueChangedEvent を呼び出す必要があると思いますよね?

そのとおりです。値変更リスナーは、コンポーネントが検証に合格した (つまり、UIInput#isValid()が返されたtrue) 場合にのみ呼び出されます。古い値に関心がない場合、値変更リスナーは、考えていたジョブに対して間違ったツールである可能性が高いことに注意してください。

于 2013-02-06T14:21:47.523 に答える