Сообщения Spring проверки по умолчанию

Мне нужно получить разрешенные сообщения об ошибках программно в контроллере. Сообщение проверки по умолчанию для ошибок typeMismatch не заполняется из моего файла messages.properties. У меня есть объект поддержки формы, где поле является целым числом. Если я отправлю строку для этого поля, я получу:

Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'establishedYear'; nested exception is java.lang.NumberFormatException: For input string: "1995a"

как сообщение по умолчанию в ObjectError. Вот мой контроллер, который его выводит:

  @RequestMapping(method = RequestMethod.POST)
  public @ResponseBody FormJSONResponse postForm(@Valid ProfileEditCompanyForm profileEditCompanyForm, BindingResult result) throws Exception {    
    if (result.hasErrors()) {
      for (ObjectError objectError : result.getAllErrors()) {
        System.out.println(objectError.getDefaultMessage());  // THIS IS NOT MY MESSAGE, BUT SHOULD BE
      }
    }
    ... other stuff ...
  }

Поэтому я добавил messages.properties в WEB-INF/classes с некоторыми тестовыми сообщениями, чтобы посмотреть, смогу ли я переопределить это сообщение по умолчанию:

typeMismatch.profileEditCompanyForm.establishedYear=test 1
typeMismatch.establishedYear=test 2
typeMismatch.java.lang.Integer=test 3
typeMismatch=test 4
profileEditCompanyForm.establishedYear=test 5
establishedYear=test 6

В моем файле app-servlet.xml у меня есть:

<mvc:annotation-driven conversion-service="conversionService" validator="validator"/>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
  <property name="basename" value="messages" />
</bean>

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
  <property name="validationMessageSource" ref="messageSource"/>
</bean>

Почему он не получает ни одно из моих сообщений из моего файла messages.properties?


person Jeremy    schedule 09.11.2012    source источник
comment
Разве messages.properties не должны находиться в папке /src/main/java?   -  person Boris Treukhov    schedule 09.11.2012


Ответы (3)


Вместо этого попробуйте это в контексте Spring:

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/classes/messages" />
</bean>

Затем внутри папки WEB-INF/classes создайте вызов файла: messages.properties

Обратите внимание на содержимое messages.properties, которое вы должны предоставить следующим образом:

typeMismatch.pathValueInsideYourJSPform:input= Your Message 

Надеюсь, это поможет вам!

вот образец

person Mehdi    schedule 14.04.2013

Попробуйте указать полный путь и попробуйте

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
      <property name="basename" value="WEB-INF/messages" />
    </bean>
person Usha    schedule 09.11.2012
comment
Не работает. Я перепробовал все, что мог придумать в этом атрибуте value, и теперь мой файл messages.properties завален повсюду, надеясь, что он что-то подберет. - person Jeremy; 10.11.2012

По-видимому, мне нужно запускать объекты FieldError через Spring MessageSource. Я надеялся, что это было сделано автоматически. Я нашел свой ответ здесь:

Как получить текст ошибки в контроллере из BindingResult

person Jeremy    schedule 09.11.2012
comment
Если вы используете ответ на обновление, данный Артуром, это означает, что он проверяет проверки в пользовательском валидаторе ... поэтому вам не нужен идентификатор компонента с валидатором ... Если вы используете ответ над ответом на обновление, вам требуется ваш валидатор идентификатора bean-компонента в servlet.xml.. Это правильно?.. я следую?.. - person user533; 12.11.2012
comment
мой вопрос в том, почему вы используете org.springframework.validation.beanvalidation.LocalValidatorFactoryBean... так что он выполняет проверки сам по себе..? - person user533; 12.11.2012