Введение
Поскольку вы не ответили на мой комментарий с вопросом о том, какой контейнер вы используете, я заглянул в историю ваших вопросов, чтобы узнать, какие контейнеры вы используете.Насколько я нашел только 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.