spring 3.0 MVC, похоже, игнорирует messages.properties

Весна 3.0 МВК

Прежде всего, я не нашел никакой документации относительно messages.properties @ springsource Все, что я нашел о переопределении сообщений об ошибках, было на разных форумах. Если у кого-нибудь есть ссылка на документацию messages.properties, это было бы здорово. Может быть, messages.properties исходит не из весны, а из спецификации Java?

Я попытался следовать совету Проверка типа JSR-303 перед привязкой Моя цель - заменить некоторые сообщения об ошибках несоответствия типов моими собственными сообщениями об ошибках, удобными для пользователя.

Моя ситуация следующая:

Модель

public class Test {

    private int numberbomb;

    public int getNumberbomb() {
        return numberbomb;
    }

    public void setNumberbomb(int numberbomb) {
        this.numberbomb = numberbomb;
    }
}

myservlet.xml

<mvc:annotation-driven/>

jsp

<form:form id="test" method="post" modelAttribute="test">

<form:errors path="*"/>

<form:label path="numberbomb">numberbomb</form:label>
<form:input path="numberbomb"/>

</form:form>

классы\сообщения.свойства

typeMismatch=bad value you bad bad person
test.numberbomb=you are driving me crazy with these bad inputs

Вывод из формы

Не удалось преобразовать значение свойства типа java.lang.String в требуемый тип int для свойства numberbomb; вложенным исключением является org.springframework.core.convert.ConversionFailedException: невозможно преобразовать значение «три» из типа java.lang.String в тип int; вложенным исключением является java.lang.NumberFormatException: для входной строки: «три»

BindingResult.toString() в моем контроллере

Ошибка поля в объекте «тест» в поле «номербомба»: отклоненное значение [три]; коды [typeMismatch.test.numberbomb, typeMismatch.numberbomb, typeMismatch.int, typeMismatch]; аргументы [org.springframework.context.support.DefaultMessageSourceResolvable: коды [test.numberbomb,numberbomb]; аргументы []; сообщение по умолчанию [номербомб]]; сообщение по умолчанию [Не удалось преобразовать значение свойства типа 'java.lang.String' в требуемый тип 'int' для свойства 'numberbomb'; вложенным исключением является org.springframework.core.convert.ConversionFailedException: невозможно преобразовать значение «три» из типа «java.lang.String» в тип «int»; вложенным исключением является java.lang.NumberFormatException: для входной строки: «три»]

Отображение сообщений об ошибках с <form:errors> неправильным образом отображает пользовательские сообщения об ошибках? Нужно ли мне что-то добавлять в конфигурационные файлы Spring, чтобы указать ему смотреть на messages.properties? Кажется, что Spring игнорирует мой файл messages.properties (который находится в папке WEB-INF\classes)

Спасибо за любые идеи!


person new Thrall    schedule 30.06.2011    source источник


Ответы (1)


Мой коллега указал мне правильное направление. Я изменил компонент messageSource в myservlet.xml.

от

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

to

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

По какой-то причине это решило проблему. Спасибо соратник! :)

person new Thrall    schedule 30.06.2011
comment
Эту причину можно найти в документации! - docs.spring.io /spring/docs/current/javadoc-api/org/ — ..поддерживает перезагрузку файлов свойств через настройку cacheSeconds, а также посредством программной очистки кеша свойств. Поскольку серверы приложений обычно кэшируют все файлы, загруженные из пути к классам, необходимо хранить ресурсы где-то еще (например, в каталоге WEB-INF веб-приложения). В противном случае изменения файлов в пути к классам не будут отражены в приложении. - person Ross; 01.06.2015