繁体   English   中英

JSR-303和Spring MVC绑定结果

[英]JSR-303 and Spring MVC Binding Result

我试图弄清楚在发生验证错误时如何获取本地化的错误消息。

我的域对象如下所示:

@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}。 所以问题是我错了吗?

在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"/>

另一件事是,如果您有一个Web应用程序,用户正在选择区域设置,则您不希望来自本地运行时的消息。 您想要获取用户的会话语言环境,并使用该语言环境进行本地化。

我也不确定如何使message属性与Spring消息源一起使用。

但是,您始终可以使用默认消息代码(请参见DefaultMessageCodesResolver ):

Email.lead.emailAddress=Sorry your email is invalid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM