我以两种方式验证 - 使用spring验证器进行自定义验证,使用javax.validation进行快速通用
Spring做得很干净,这段代码将完全用于给定语言环境的文档并提取所需的文本。
private Errors checkPasswordMatch(Person p, Errors errors) {
if (!p.getPassword().equals(p.getRepeatedPassword())) {
errors.rejectValue("password", "person.password.mismatch");
errors.rejectValue("repeatedPassword", "person.password.mismatch");
}
return errors;
}
Javax不那么麻烦,但是没有办法用不同的语言生成消息。
@NotNull
@Size(min = 10, max = 10, message = "size must be 10 characters")
protected String birthDate;
如何建议javax转到某些GB.properties或US.properties或IT.properties文件以提取消息的方式与spring相同,具体取决于用户区域设置?
答案 0 :(得分:5)
@Size(min = 10, max = 10, message = "{birthDate.size}")
protected String birthDate;
in(如果你没有,则在classpath中创建一个)ValidationMessages.properties
定义为birthDate.size = some message
编辑1:
保持文件分开。与您的应用程序特定消息不同,ValidationMessages需要随着您的bean一起发送/打包。您不需要为ValidationMessages.properties文件定义bean。它会自动拾取
答案 1 :(得分:0)
我不太了解javax.validation,但我假设您在ValidationException
中收到了抛出的消息。
因此,为异常而不是消息定义消息密钥,并在显示异常/消息时自己在相应的资源包中进行查找。
在Struts2中我们会做这样的事情:
@Size(min = 10, max = 10, message = "size.exact.10")
protected String birthDate;
//in the JSP display the message:
<s:text name="%{exception.message}"/>
我猜你可以做类似的事情。