介绍
由于您未对使用的是哪个容器的问题发表评论,因此我在您的问题历史记录中进行了了解,以了解所有使用的容器。到目前为止,我只找到了Tomcat。因此,对于这个答案,我将假设您确实使用了我最初在发布评论时所猜测的Tomcat。
确保安装所有JAR
Tomcat并未附带任何JSR303 Bean验证API
/实现。您需要自己下载并安装。您可以编译这些批注,这意味着您已正确将
hibernate-validator.jar文件删除了(名称可能因版本而异)在
/WEB-INF/libwebapp文件夹中。这些注释反过来似乎没有任何作用,仅意味着您没有阅读
readme.txt和/或忘记从
/lib/requiredHibernate
Validator库zip / tgz文件的文件夹中添加JAR :
slf4j-api.jar和
validation-api.jar。为了使注释真正起作用,最后一个是强制性的。因此,要使Hibernate
Validator在Tomcat中工作,您需要在webapp的以下JAR
/WEB-INF/lib:
validation-api.jar
(包含抽象API和注释扫描器)hibernate-validator.jar
(包含具体实现)slf4j-api.jar
(只是为了使其记录器也能正常工作)
这种方式
@NotBlank,
@NotEmpty必须工作。该
@NotNull值得特别关注;
由于HTTP请求参数的性质,默认情况下,即从客户端(Web浏览器)将空输入字段作为空字符串接收。空字符串与并不相同
null,因此
@NotNull默认情况下不会插入任何字符串。但是
null,只需将以下上下文参数添加到,JSF就可以配置为解释它们
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,即仅当在运行时类路径中找到JSR303 Bean验证API时)或将其设置为
true。
BV根本不起作用
当BV实际上什么都不起作用
@Size时
@Pattern,,等也不起作用,那么您应该验证您的表单中是否
没有 以下内容:
<f:validateBean disabled="true" />
然后,您应该将其删除(默认情况下将自动踢入)或进行设置
disabled="false"。
确保使用最新的Mojarra
如果BV _仍然_无法正常工作,请确认您是否未使用2.2.3和2.2.6之间的旧版Mojarra。这些版本有一个类加载委托错误,导致在Tomcat和克隆上的Bean验证完全不可见。据报道,这是Mojarra问题3183,已在Mojarra2.2.7中修复。



