2

有没有办法使用 JSR-303(休眠)注释并使用 {0} {1} 语法修改消息?似乎使用 Spring Validator 可以为您提供以下信息:

字符串 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

如发现herehere,也适用于不使用hibernate的验证器。

于 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 返回一个 Set<ConstraintViolation<Object> 获取注释参数(如 @Size 的最小和最大注释值) >) 使用 .getConstraintDescriptor.getAttributes(),如果您想使用 {0} {1} 等符号将它们参数化为消息(例如,@Size 的数字可能不是 0 和 1,我不'手头没有代码,但我似乎记得在 getAttributes 返回的 Map 中还有一些其他数据“介于两者之间”)。

请注意,在我的情况下,我使用了编程验证(从 Validation.buildDefaultValidatorFactory().getValidator() 获取 Validator-object 并使用它来验证具有 JSR-303 -annotations 的对象),从 ConstraintViolations 集中提取所需的数据(如果Set 不为空),将数据放入自定义的 Exception-class 并将其从服务中丢弃,一直到 org.springframework.web.servlet.HandlerExceptionResolver -implementation,它将收集本地化键和消息参数来自异常对象并通过 MessageSource 本地化消息,因此这可能不是您正在寻找的内容。

于 2011-01-28T20:25:46.963 回答