0

JSF 2.0 と Glassfish v3 を使用しています。JSR303 Bean 検証の機能をテストしていたので、実装するバリデーターを作成し、検証しConstraintValidatorたいプロパティに注釈を付けました。

問題なく動作しますが、Glassfish のデフォルトのエラー ページが表示されます。これを表示したくないので、メッセージを a<h:outputText>または何かに表示したいと思います。

これを達成する方法を知っている人はいますか?

これが私のバリデータメソッドです:

@Override
public boolean isValid(String searchArg, ConstraintValidatorContext ctx) {

    boolean searchArgCorrect = true;
    FacesMessage msg;
    if(searchArg!=null) {
        ctx.disableDefaultConstraintViolation();
        if(searchArg.length() < 3) {
            ctx.buildConstraintViolationWithTemplate("Searcharg is too short").addConstraintViolation();
            searchArgCorrect=false;

            msg = new FacesMessage(
                    FacesMessage.SEVERITY_ERROR,
                    "Searcharg is too short", null);

            throw new  ValidatorException(msg);
        }
    }

    return searchArgCorrect;
}

PS: 文字列の長さを検証する簡単な方法があることは知っていますが、上記のコード スニペットはデモ/テストのみを目的としています。私はバリデータと別の計画を持っています。

4

1 に答える 1

6

JSF 検証と JSR 303 Bean 検証の 2 つの概念が混在しています。JSR303 Bean 検証を実装していますが、JSF 固有のValidatorException.

メソッドは例外をスローしてはなりません。メソッドは、検証結果に応じてtrueorを返す必要があります。falseメッセージは で定義する必要がありますValidationMessages.properties。JSF は<h:message>、入力コンポーネントに関連付けられている にそれを表示します。

メッセージ付きのカスタム制約の作成に関するこのドキュメントも参照してください。


または、実際に標準の JSF バリデーターを使用している場合は、javax.faces.validator.Validator代わりに実装し、 で注釈を付けて@FacesValidatorビューで宣言する必要があります<f:validator>。をスローすることができ、メッセージは入力コンポーネントに関連付けられてValidatorException表示されます。<h:message>

于 2011-02-18T13:13:23.020 に答える