我试图找出在发生验证错误时如何获取本地化错误消息。
我的域对象如下所示:
@RooJavaBean
@RooToString
@RooEntity
public class Lead {
@Email(message = "{email_error_message}")
String emailAddress;
}
我的控制器看起来像这样:
@RequestMapping(method=RequestMethod.POST)
public @ResponseBody String create(@Valid Lead lead, BindingResult result) {
log.debug("In POST!");
if(result.hasErrors())
{
FieldError fieldError = result.getFieldError("emailAddress");
return fieldError.getDefaultMessage();
}
else
{
log.debug("Email = " + lead.getEmailAddress());
try
{
lead.persist();
lead.flush();
}
catch(DataAccessException ex)
{
log.debug("Oh OH...");
return "Sorry we are experiencing technical difficulties, please try again later";
}
return "";
}
}
我还创建了ValidationMessages.properties。
email_error_message=Sorry your email is invalid
在我的webmvc-config.xml中:
<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource"
p:basenames="WEB-INF/i18n/messages,WEB-INF/i18n/application" p:fallbackToSystemLocale="false"/>
我从fieldError.getDefaultMessage()获得的错误是{email_error_message}。所以问题是我错了什么?
答案 0 :(得分:0)
我不确定如何使message
属性也适用于Spring消息源。
但是,您始终可以使用默认消息代码(请参阅DefaultMessageCodesResolver
):
Email.lead.emailAddress=Sorry your email is invalid
答案 1 :(得分:0)
在webmvc-config.xml中,您正在从application.properties加载属性。
如果您的ValidationMessages.properties位于同一个目录中,请尝试加载它:
<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource"
p:basenames="WEB-INF/i18n/messages,WEB-INF/i18n/application,WEB-INF/i18n/messages,WEB-INF/i18n/ValidationMessages" p:fallbackToSystemLocale="false"/>
另一件事是,如果您有一个用户正在选择区域设置的webapp,您不希望来自本地运行时的消息。您希望获取用户的会话区域设置并使用它来进行本地化。