Spring 3验证:在errorArgs中使用messages.property条目?

时间:2012-11-05 19:26:54

标签: java spring localization validation locale

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

  • 代表EN:“名字”
  • for IT:“Nome”

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

    EN的
  • :“名字字段是必需的”
  • for IT:“il campo Nome ès富利斯塔”

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

我有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”字符串。我想在运行时使用适当的语言环境注入字段名称。有办法吗?

1 个答案:

答案 0 :(得分:2)

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

messageSource注入Controller或验证器:

@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");
....
}

更新:

您可以使用LocaleContextHolder

在Validator中获取Locale的句柄