javax.validation如何定位不同的语言环境?

时间:2012-04-03 08:25:50

标签: java spring validation

我以两种方式验证 - 使用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相同,具体取决于用户区域设置?

2 个答案:

答案 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}"/>

我猜你可以做类似的事情。