2012-06-20 3 views
3

Я не могу получить свои сообщения в messages.properties, которые будут использоваться во время проверки моей формы объектов моей формы.Spring MessageSource не используется во время проверки

приложение-config.xml:

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

WEB-INF/классы/messages.properties:

NotEmpty=This field should not be empty. 

Форма Подложка Объект:

... 
    @NotEmpty 
    @Size(min=6, max=25) 
    private String password; 
... 

Когда я Переберите все ошибок в BindingResult и вывести объект toString объекта ObjectError. Я получаю это:

Как вы можете видеть сообщение по умолчанию «может быть не пустым» вместо моего сообщения «Это поле не должно быть пустым».

Я получаю свое правильное сообщение, если я вставляю messageSource в контроллер и выводю его: messageSource.getMessage («NotEmpty», новый Object [] {«password»}, «default empty message», null);

Так почему же не проверка с использованием моих сообщений.properties? Я запускаю Spring 3.1.1. Благодаря!

+0

«Весенняя проверка» - это лишь некоторые интерфейсы. Используете ли вы javax.validation с Hibernate Validator? – Affe

+1

Я использую '@ Valid' (javax.validation.Valid), и в моих объектах поддержки формы я использую проверку, например' @ NotEmpty' (org.hibernate.validator.constraints.NotEmpty). Это то, что вы имели ввиду? – Jeremy

ответ

2

@NotEmpty имеет свойство сообщения, которое вы можете установить на нем. Поскольку вы не устанавливаете его, он использует сообщение по умолчанию.

@NotEmpty(message="{NotEmpty}") 

должно предоставить вам то, что вы ищете.

+0

Да, если я устанавливаю сообщение для каждого @NotEmpty, он использует это. Но я хочу, чтобы он использовал мои сообщения .properties, чтобы получить сообщение по умолчанию для NotEmpty, поэтому мне не нужно устанавливать его для каждого NotEmpty. – Jeremy

+0

Я никогда не видел, что вы говорите весной. Проверки связаны с полями и должны обрабатываться как таковые. Если вы используете сообщение по умолчанию для всех полей с одинаковой проблемой, это делает обратную связь менее ценной. Пустой пароль не совпадает с пустым именем пользователя и дает общий ответ, например «У вас пустое поле», действительно не имеет значения. – Joe

+0

Я знаю, что весна использует файл messages.properties с помощью LocalValidatorFactoryBean и добавляет валидатор в свой тег mvc: annotation. Вы правы, я не хочу иметь общее сообщение NotEmpty для всех полей.И добавление этого атрибута сообщения в NotEmpty действительно работает, но я надеялся, что он заберет мое сообщение NotEmpty.password в моих сообщениях.properties, не указывая явным образом использование NotEmpty.password. – Jeremy

7

По умолчанию HibernateValidator получит все свои сообщения от /WEB-INF/classes/ValidationMessages.properties Он читает этот файл непосредственно сам, а не через Spring MessageSource.

Если вы хотите переводить из источника источника света, установите его на LocalValidatorFactoryBean. Это требует, чтобы вы вручную настроили bean-элемент проверки внутри сервлета диспетчера, а не полагались на mvc: annotation-driven.

+2

Вы также можете зарегистрировать настраиваемый bean-компонент, который будет использоваться по умолчанию, с помощью ' – lolotron

2

Если вы хотите настроить настраиваемое сообщение для любого поля с использованием проверок JSR 303, вам необходимо указать имя компонента (LoginForm) и имя поля (пароль) в ключе сообщения в файле свойств. Формат CONSTRAINT_NAME.COMMAND_NAME.FIELD_NAME

NotEmpty.loginform.password=This field should not be empty. 
Смежные вопросы