Как вернуть пользовательское сообщение в JSP, используя Spring 3 MVC и Hibernate валидатор (JSR303) - PullRequest
1 голос
/ 01 августа 2011

У меня есть проект, использующий Spring 3 MVC и средство проверки гибернации для проверки объекта формы.

Я следую за документом Spring

В моем контроллере я могу получить результат привязки,который bindingresult.hasErrors() == true.

Я использую ReloadableResourceBundleMessageSource для привязки сообщения об ошибке.
И мой вопрос: Возможно ли, что у меня может быть более гибкое отображение сообщения об ошибкена моей странице JSP?

Например, я хочу сказать, что «имя приложения UserEnteredAppName недопустимо. Размер должен быть между 2 и 255 ».

В моем сообщении message.property я определяю:

Size.appNameForm.itemName=the app name {What Should I do in this brace?} is not valid. The size should be between {1} and {2}

{1} и {2} могут быть интерполированы до '2' и '255'.но как я могу получить UserEnteredAppName в интерполированном сообщении?

Ниже приведены мой класс формы и класс контроллера:

Мой класс контроллера:

@RequestMapping(value="foo.htm")
public String handleAppNameFormSubmit(@Valid @ModelAttribute("appNameForm") AppNameForm form, BindingResult result){
}

Мой класс формы:

public class AppNameForm implements IForm{
    @NotEmpty
    @Size(min = 1, max = 255)
    private String itemName;
    ....
}

Я нахожу несколько ссылок, которые дают мне подсказку:

, например: Как динамически разрешить параметры сообщения с помощью Hibernate Validator?

Но я использую Spring mvc и Spring Controll, который использует реализация jsr303, я не могу найти способ использовать собственный валидатор, расширяющий стандартное значение ValidatorImpl в hibernate.

Что я думаю, решение, я могу иметь собственный валидатор, который будет отклонять UserEnteredAppName в bindingResult.Является ли это возможным?или я должен найти другой путь?

Спасибо, Андрей

1 Ответ

1 голос
/ 01 августа 2011

Начиная с версии 4.2 Hibernate Validator предоставляет ValueFormatterMessageInterpolator , новый интерполятор сообщений, который должен соответствовать вашим требованиям.

С этим интерполятором вы можете обратиться к проверенному значению, используя заполнитель ${validatedValue}.Вы также можете указать строку формата , которая будет применяться следующим образом: ${validatedValue:[format string]}, например, ${validatedValue:%1$ty}, если проверенное значение является датой.

Можно найти пример использования этого интерполятора.в справочнике Hibernate справочное руководство .

...