0

すべてのフォーム フィールドを検証するカスタム バリデータを作成しました。Incefaces 3.2 と JSF 2.0 を使用しています。整数型の UIInput に複数の問題があることに気付きました。フォームにデータを入力せずに送信をクリックすると、myUIInput.getValue() を使用してカスタム バリデーターのフィールド値をチェックし、必要な検証を実行できます。

フィールドに値を入力して送信するときは、カスタム バリデーターで getSubmittedValue() を使用して検証します。ここまでは順調ですね。UI からフィールドから値を削除 (空にして) 送信すると、getValue() はまだ古い値を保持しています。isLocalValueSet() は常に null を返します。

初めて検証を実行した後、以下をリセットしようとしました。それも助けにはなりませんでした。

        myInput.setValue(null);
        myInput.setSubmittedValue(null);
        myInput.setLocalValueSet(false);

フィールドの状態を初期値にリセットするにはどうすればよいですか? バリデーションを実行した後に isLocalValueSet() を適切に設定するにはどうすればよいですか? 前もって感謝します。

4

1 に答える 1

1

JSF コンポーネントは、コンポーネント ツリーに表示される順序で検証されます。で作業していることを考えると、これは、コンポーネントが処理される前にgetSubmittedValue()カスタムバリデーターが起動されることを意味するだけです。おそらく、フォームの最初などにある隠し入力にバリデーターをアタッチしたでしょう。

つまり、カスタムバリデーターが終了すると、JSF はコンポーネントツリー内の後続のすべてのコンポーネントの処理を続行し、個々のコンポーネントごとに検証プロセス全体を「通常の方法」でやり直し、カスタムから操作したコンポーネントの状態をオーバーライドします。バリデータオン。

具体的な機能要件とは何か、なぜそのようにアプローチする必要があるのか​​ はわかりませんが、これはやや臭いですが、すべてのコンポーネントが処理された後にカスタムバリデーターを起動することで理論的に解決できます. getValue()の代わりにを扱いgetSubmittedValue()ます。繰り返しになりますが、具体的な機能要件が不明確すぎて、設計の改善を示唆することはできません。

于 2013-03-14T02:36:34.503 に答える