Mah*_*leh 27 jsf tomcat bean-validation jsf-2
我在我的JSF托管bean中使用Hibernate Validation注释.当我使用时@NotNull,@NotBlank或者@NotEmpty它们似乎没有以任何方式触发.
@NotBlank(message = "{name.required}")
public String name;
Run Code Online (Sandbox Code Playgroud)
视图:
<h:outputLabel value="Name:" />
<h:inputText id="name" value="#{person.name}" size="20" />
<h:message for="name" style="color:red" />
Run Code Online (Sandbox Code Playgroud)
这是怎么造成的,我该如何解决?
Bal*_*usC 66
由于您没有对我的评论提出任何反馈,问题是您正在使用哪个容器,我在您的问题历史中偷看,了解您正在使用的容器.到目前为止,我发现只有Tomcat.所以我会回答这个问题,假设您确实在使用Tomcat,因为我在发布评论时最初猜到了.
Tomcat没有附带任何JSR303 Bean Validation API /实现.您需要自己下载并安装它.你有这些注释进行编译意味着你已经正确地删除了webapp文件夹中的hibernate-validator.jar文件(命名可能因版本而异)/WEB-INF/lib.那些注释反过来似乎没有任何作用只能意味着你没有阅读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请求参数的性质,默认情况下空输入字段作为空字符串从客户端(webbrowser)接收.空字符串不一样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>
Run Code Online (Sandbox Code Playgroud)
这种方式也@NotNull必须有效.
如果它仍然不起作用(即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>
Run Code Online (Sandbox Code Playgroud)
然后您应该将其删除(默认为auto,即仅在运行时类路径中找到JSR303 Bean Validation API时)或将其设置为true.
当其实也没什么BV的工作,还没有@Size,@Pattern等等,那么你应该检查,如果你没有在你的格式如下:
<f:validateBean disabled="true" />
Run Code Online (Sandbox Code Playgroud)
然后你应该删除它(它将默认启动)或设置disabled="false".
当BV 仍然不起作用时,请验证您是否在2.2.3和2.2.6之间没有使用旧的Mojarra版本.这些版本有一个类加载委托错误导致Tomcat上的Bean Validation和克隆完全不可见.这被报道为Mojarra问题3183并在Mojarra 2.2.7中修复.
| 归档时间: |
|
| 查看次数: |
61282 次 |
| 最近记录: |