栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Bean验证@ NotNull,@ NotBlank和@NotEmpty在JSF + Tomcat中不起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Bean验证@ NotNull,@ NotBlank和@NotEmpty在JSF + Tomcat中不起作用

介绍

由于您未对使用的是哪个容器的问题发表评论,因此我在您的问题历史记录中进行了了解,以了解所有使用的容器。到目前为止,我只找到了Tomcat。因此,对于这个答案,我将假设您确实使用了我最初在发布评论时所猜测的Tomcat。

确保安装所有JAR

Tomcat并未附带任何JSR303 Bean验证API
/实现。您需要自己下载并安装。您可以编译这些批注,这意味着您已正确将

hibernate-validator.jar
文件删除了(名称可能因版本而异)在
/WEB-INF/lib
webapp文件夹中。这些注释反过来似乎没有任何作用,仅意味着您没有阅读
readme.txt
和/或忘记从
/lib/required
Hibernate
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
,只需将以下上下文参数添加到,JS​​F就可以配置为解释它们
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中修复。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367312.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号