2

JSR-303 (休止状態) アノテーションを使用し、{0} {1} 構文を使用してメッセージを変更する方法はありますか? Spring Validator を使用すると、次のようになります。

String args[] = {"mark", "is", "cool"};
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "aboutYou", "aboutYou.required", args);

だから、メッセージを変えることができます。ただし、注釈を使用すると、メッセージ引数を使用できません。使用する引数が限られている (最小、最大など) ことは理解していますが、一般的なステートメントを作成してテキストを追加したいと考えています。

java: @NotEmpty (message="validation.name.required") プライベート文字列名;

プロパティ validation.name.required={0} が必要です...

出力:

フルネームが必要です。

4

2 に答える 2

1

あなたのインターフェースで:

public @interface Test{

    int value() default 7;

    String message() default "{MESSAGE}";    
}

メッセージファイルで:

MESSAGE=Testing param {value}

出力:

Testing param 7

hereおよびhereにあるように、休止状態を使用しないバリデーターでも機能します。

于 2012-08-14T12:52:11.003 に答える
0

Spring を使用しているように見えるので、これが役立つかもしれません: http://blog.inflinx.com/2010/03/10/jsr-303-bean-validation-using-spring-3/

ConstraintViolation< Object> -object (javax.validation.Validator.validate(Object) -method returns a Set< ConstraintViolation< Object> から注釈パラメーター (@Size の最小および最大注釈値など) を取得することもできます。 >) .getConstraintDescriptor.getAttributes() を使用して、{0} {1} などを使用してそれらをメッセージにパラメーター化する場合。コードは手元にありませんが、getAttributes が返した Map の「間に」他のデータがあったことを思い出すようです)。

私の場合、プログラムによる検証 (Validation.buildDefaultValidatorFactory().getValidator() から Validator-object を取得し、それを使用して JSR-303 アノテーションでオブジェクトを検証する) を使用し、ConstraintViolations のセットから必要なデータを抽出したことに注意してください (セットは空ではありませんでした)、データをカスタム Exception クラスに入れ、それをサービスからスローし、ローカリゼーション キーとメッセージ パラメータを収集する org.springframework.web.servlet.HandlerExceptionResolver 実装までずっと例外オブジェクトからメッセージをローカライズし、MessageSource を介してメッセージをローカライズするため、これはまさに探しているものではない可能性があります。

于 2011-01-28T20:25:46.963 に答える