Результат связывания JSR-303 и Spring MVC - PullRequest
1 голос
/ 22 февраля 2011

Я пытаюсь выяснить, как получить локализованные сообщения об ошибках при возникновении ошибки проверки.

Мой объект домена выглядит так:

@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}. Так что вопрос в том, что я не прав?

Ответы [ 2 ]

0 голосов
/ 17 мая 2013

В вашем файле 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"/>

Другое дело, если у вас есть веб-приложение, пользователи которого выбирают локаль, вам не нужно сообщение из локальной среды выполнения.Вы хотите получить локаль сеанса пользователя и использовать ее для локализации.

0 голосов
/ 22 февраля 2011

Я не уверен, как заставить атрибут message работать с источниками сообщений Spring.

Однако вы всегда можете использовать код сообщения по умолчанию (см. DefaultMessageCodesResolver):

Email.lead.emailAddress=Sorry your email is invalid
...