3

在我的表单支持对象的 Spring 验证期间,我无法在 messages.properties 中获取我的消息。

应用程序配置.xml:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
  <property name="basename" value="messages" />
</bean>

WEB-INF/classes/messages.properties:

NotEmpty=This field should not be empty.

表单支持对象:

...
  @NotEmpty
  @Size(min=6, max=25)
  private String password;
...

当我遍历 BindingResult 中的所有错误并输出 ObjectError 的 toString 时,我得到以下信息:

Field error in object 'settingsForm' on field 'password': rejected value []; codes [NotEmpty.settingsForm.password,NotEmpty.password,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [settingsForm.password,password]; arguments []; default message [password]]; default message [may not be empty]

如您所见,默认消息是“可能不是空的”,而不是我的消息“此字段不应为空”。

如果我将 messageSource 注入控制器并输出以下内容,我确实会收到正确的消息: messageSource.getMessage("NotEmpty", new Object [] {"password"}, "default empty message", null);

那么为什么不使用我的messages.properties 进行验证呢?我正在运行 Spring 3.1.1。谢谢!

4

3 回答 3

7

默认情况下,HibernateValidator 会从/WEB-INF/classes/ValidationMessages.properties 它自己直接读取这个文件中获取它的所有消息,而不是通过 Spring MessageSource。

如果您想要来自 Spring Message 源的翻译,请在LocalValidatorFactoryBean上设置一个。这确实需要您在调度程序 servlet 中手动设置一个验证 bean,而不是依赖于 mvc:annotation-driven。

于 2012-06-21T07:08:46.930 回答
2

当您想使用 JSR 303 验证为任何字段设置自定义消息时,您需要在属性文件中的消息键中指定 bean 名称(LoginForm)和字段名称(密码)。格式为 CONSTRAINT_NAME.COMMAND_NAME.FIELD_NAME

NotEmpty.loginform.password=This field should not be empty.
于 2012-06-21T09:04:37.360 回答
1

@NotEmpty 有一个可以设置的消息属性。由于您没有设置它,因此它使用默认消息。

@NotEmpty(message="{NotEmpty}")

应该给你你正在寻找的东西。

于 2012-06-21T03:13:26.540 回答