5

我正在寻找的东西很容易解释:我有一个必须支持意大利语和英语的表格。假设我有一个名字输入文本字段。表单标签将是:

  • 对于 EN:“名字”
  • 对于 IT:“名称”

我想要的是这样的验证错误消息

  • 对于 EN:“名字字段是必需的”
  • 对于 IT:“il campo Nome è richiesto”

请注意,我在错误消息中引用了字段名称。

我有以下messages_en.properties几行:

errors.empty.field = the {0} field is required
registration.form.firstname = First Name

当然还有messages_it.properties线条:

errors.empty.field = il campo {0} è richiesto
registration.form.firstname = Nome

现在,在我的自定义验证器类中,我有

ValidationUtils.rejectIfEmpty(errors, "firstname", "errors.empty.field", new Object[]{"registration.form.firstname"}, "the First Name is required");

这不能正常工作。输出是“registration.form.username”字符串。我想在运行时使用正确的语言环境注入字段名称。有没有办法这样做?

4

1 回答 1

2

这是一种方法,但应该有更好的方法:

注入messageSource控制器或验证器:

@Autowired MessageSource messageSource

在您的控制器@RequestMapping方法中,将 Locale 作为参数,Spring 将为您填充它。

@RequestMapping(...)
public String myMethod(..., Locale locale){
   ValidationUtils.rejectIfEmpty(errors, "firstname", "errors.empty.field", new Object[]{messageSource.getMessage("registration.form.firstname", new Object[]{}, locale)}, "the First Name is required");
....
}

更新:

您可以使用LocaleContextHolderLocale在 Validator 中处理

于 2012-11-05T19:41:57.783 回答