2

JSF1.2でカスタムバリデーターを実装する正しい方法は何だろうと思っていました。私のバリデータークラスで」

public void validate(FacesContext context, UIComponent component,Object value) throws   ValidatorException {}

メソッドでは、検証チェックを実行し、条件が無効な場合にFacesMessageインスタンスをコンテキストに追加します。context.addMessage(new FacesMessage(xxx...);これは私のアプリケーションでは正常に機能しているようです。throw new ValidatorException()ただし、 JSFがライフサイクルを正しく処理するために明示的にも必要かどうかはわかりません。または、JSFは、ライフサイクルを管理するためにコンテキスト内のエラーメッセージを確認するのに十分賢いでしょうか?

4

1 に答える 1

2

あなたは確かにを投げているはずValidatorExceptionです。それ以外の場合、JSFは引き続きリクエストの処理を続行し、モデル値を更新してアクションメソッドを呼び出します。あなたはそれを持ちたくない。

手動で追加しないでくださいFacesMessage。それを使用してを構築するValidatorExceptionと、JSFはメッセージを適切なコンポーネントに自動的に追加し、JSFはモデル値の更新アクションの呼び出しフェーズを正しくスキップします。

if (!valid) {
    FacesMessage message = new FacesMessage(SEVERITY_ERROR, "Invalid", null);
    throw new ValidatorException(message);
}
于 2012-04-27T16:22:04.963 に答える