Есть ли способ использовать аннотации JSR-303 (hibernate) и изменить сообщение, используя синтаксис {0} {1}? - PullRequest
2 голосов
/ 24 января 2011

Есть ли способ использовать аннотации JSR-303 (спящий режим) и изменить Сообщение, используя синтаксис {0} {1}? Кажется, что использование Spring Validator дает вам это:

String args [] = {"mark", "is", "cool"};
ValidationUtils.rejectIfEmptyOrWhitespace (ошибки, "aboutYou", "aboutYou.required", args);

Так что я могу изменить сообщение. Однако, если я использую аннотации, я не могу использовать аргументы сообщения. Я понимаю, что есть ограниченные (минимальные, максимальные и т. Д.) Аргументы для использования, но мы хотим сделать общее утверждение и добавить некоторый текст.

Java: @NotEmpty (message = "validation.name.required") личное строковое имя;

свойства validation.name.required = {0} требуется ...

Выход:

Требуется полное имя.

Ответы [ 2 ]

1 голос
/ 14 августа 2012

В вашем интерфейсе:

public @interface Test{

    int value() default 7;

    String message() default "{MESSAGE}";    
}

В вашем файле сообщений:

MESSAGE=Testing param {value}

Выход:

Testing param 7

Как найдено здесь и здесь , работает для валидаторов, которые также не используют hibernate.

0 голосов
/ 28 января 2011

Поскольку кажется, что вы используете Spring, это может помочь: http://blog.inflinx.com/2010/03/10/jsr-303-bean-validation-using-spring-3/

Вы также можете получить параметры аннотации (например, минимальные и максимальные значения аннотации для @Size) из ConstraintViolation -объекта (javax.validation.Validator.validate (Object) -метод возвращает Set >) с .getConstraintDescriptor.getAttributes (), если вы хотите параметризовать их для сообщений с нотацией {0} {1} и т. Д. (Числа могут быть чем-то отличным от 0 и 1 для @Size, например , У меня нет кода под рукой, но я, кажется, напоминаю, что на карте были некоторые другие «промежуточные» данные, которые возвращает getAttributes).

Обратите внимание, что в моем случае я использовал программную проверку (получение объекта Validator из Validation.buildDefaultValidatorFactory (). GetValidator () и использование его для проверки объекта с помощью JSR-303 -аннотаций), извлек необходимые данные из набора ConstraintViolations (если Set не был пустым), поместите данные в пользовательский Exception-класс и выбросите их из службы, вплоть до org.springframework.web.servlet.HandlerExceptionResolver -implementation, который соберет ключи локализации и параметры сообщения из объекта исключения и локализуйте сообщения через MessageSource, так что это может быть не совсем то, что вы ищете.

...