Проверка бинов @NotNull, @NotBlank и @NotEmpty не работает в JSF + Tomcat - PullRequest
27 голосов
/ 25 сентября 2011

Я использую аннотации Hibernate Validation в моем управляемом компоненте JSF.Когда я использую @NotNull, @NotBlank или @NotEmpty, они, похоже, не срабатывают никоим образом.и как я могу это решить?

Ответы [ 3 ]

66 голосов
/ 26 сентября 2011

Введение

Поскольку вы не ответили на мой комментарий с вопросом о том, какой контейнер вы используете, я заглянул в историю ваших вопросов, чтобы узнать, какие контейнеры вы используете.Насколько я нашел только Tomcat .Поэтому я для этого ответа предположу, что вы действительно используете Tomcat, как я и предполагал при публикации комментария.

Убедитесь, что вы установили все файлы JAR

Tomcat не поставляется ни с одним компонентом JSR303Валидация API / реализация из коробки.Вам необходимо загрузить и установить самостоятельно.То, что вы получили эти аннотации для компиляции, означает, что вы правильно удалили файл hibernate-validator.jar (имя может отличаться в зависимости от версии) в папке /WEB-INF/lib вашего веб-приложения.То, что эти аннотации, в свою очередь, никак не работают, может означать, что вы не прочитали readme.txt и / или забыли добавить файлы JAR из папки /lib/required файла zip / tgz библиотеки Hibernate Validator:slf4j-api.jar и validation-api.jar.Последний является обязательным для того, чтобы аннотации действительно работали.Итак, чтобы заставить Hibernate Validator работать в Tomcat, вам нужны следующие JAR-файлы в /WEB-INF/lib веб-приложения:

  • validation-api.jar (содержит абстрактный API и сканер аннотаций)
  • hibernate-validator.jar (содержит конкретную реализацию)
  • slf4j-api.jar (просто для работы его регистратора)

Таким образом @NotBlank и@NotEmpty должно работать.@NotNull заслуживает особого внимания;Пустые поля ввода, а именно по умолчанию, принимаются как пустые строки от клиента (веб-браузера) из-за особенностей параметров HTTP-запроса.Пустые строки не совпадают с null, поэтому @NotNull по умолчанию никогда не сработает. Однако JSF можно настроить для интерпретации их как null, просто добавив следующий параметр контекста в web.xml:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

Таким образом, @NotNull также должен работать.

BV работает, но только пустые поля не

Если это все еще не работает (т.е. ни одна из 3 аннотаций не работает, но другие, такие как @Size(min=5) для минимальной длины 5, работают нормально), тогда велики шансы, что выа также следующий контекстный параметр в web.xml:

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>false</param-value>
</context-param>

Затем вы должны удалить его (по умолчанию auto, т.е. только когда API проверки бина JSR303 найден в пути к классам времени выполнения) или установить его наtrue.

BV вообще не работает

Когда фактически ничего из BV не работает, также не @Size, @Patternи т. д., затем вы должны проверить, если у вас не есть в вашей форме следующее:

<f:validateBean disabled="true" />

Затем вы должны удалитьt (он просто включается по умолчанию) или для установки disabled="false".

Убедитесь, что вы используете самые последние Mojarra

Когда BV все еще не работает,затем убедитесь, что вы не используете старую версию Mojarra между 2.2.3 и 2.2.6.В этих версиях была ошибка делегирования загрузки классов, приводившая к тому, что Bean Validation на Tomcat и клонах становились полностью невидимыми.Это сообщается как Mojarra выпуск 3183 и исправлено в Mojarra 2.2.7.

4 голосов
/ 02 октября 2012

У меня была похожая проблема, и я смог ее решить, включив три нижеприведенных банки в web-inf lib. Просто добавьте банку валидатора гибернации и необходимые баночки, как указано в zip-файле:

  • hibernate-validator-4.3.0.Final.jar
  • jboss-logging-3.1.0.CR2.jar
  • validation-api-1.0.0.GA.jar
0 голосов
/ 23 июля 2016

Если по-прежнему не удается выполнить проверку даже после добавления указанных файлов, возможно, вы пропустили добавление тега

 <mvc:annotation-driven />

в файле конфигурации пружины.

...