2011-01-24 1 views
2

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

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

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

java: @NotEmpty (message = "validation.name.required") private String name;

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

Выход: требуется

Полное имя.

ответ

0

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

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

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

1

В интерфейсе:

public @interface Test{ 

    int value() default 7; 

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

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

MESSAGE=Testing param {value} 

Выход:

Testing param 7 

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

 Смежные вопросы

  • Нет связанных вопросов^_^