我已经成功集成了JSF(Mojarra)和CDI(Weld),但无法让Hibernate Validator工作。
以下jar添加到WEB-INF / lib:
validation-api-1.1.0.Final.jar
hibernate-validator-5.1.0.Final.jar
jboss-logging-3.1.3.GA.jar
classmate-1.0.0.jar
Tomcat 7附带EL 2.2罐子,所以我没有添加它们。
我的JSF页面:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Test</title>
</h:head>
<h:body>
<h:form>
<h1><h:outputText id="hello" value="Hello, #{testController.name}!"/></h1>
<p:inputText id="name" value="#{testController.name}"/>
<h:message id="error" for="name"/>
<h:commandButton value="Change Name">
<f:ajax execute="name" render="hello error"/>
</h:commandButton>
</h:form>
</h:body>
</html>
我的支持豆:
@Named
@ApplicationScoped
public class TestController {
@NotNull
@Size(min = 3, max = 5)
private String name;
@PostConstruct
private void init() {
name = "Bill";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
预计当名称的大小小于3或大于5时,会显示错误消息,但事实证明并非如此。似乎Hibernate Validator无法正常工作。我确实看到它被检测到但不再记录:
Mar 11, 2014 9:31:40 PM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 5.1.0.Final
有什么不对吗?
更新
最后我发现这是一个Mojarra回归。 Hibernate Validator现在可以使用MyFaces。
答案 0 :(得分:0)
为了避免混淆(因为我已经感到困惑,因为我已经解决了因为我没有在帖子末尾看到更新部分而已经解决了错误),让我代表OP:
OP似乎使用了一个破坏的Mojarra版本。他们通过迁移到MyFaces解决了这个问题(请参阅他们问题的更新)。 FWIW,我用Mojarra 2.2.12尝试了他们的例子,它运行良好。
答案 1 :(得分:-1)
当你说你与Tomcat 7集成时,你是怎么做到的?应用程序服务器中有一些粘合代码,可确保例如ValidatorFactory对JSF可见。不确定你是否也需要这样的东西。
您是否启用了调试/跟踪日志记录以验证Validator是引导还是被调用?
您也可以尝试添加到JSF页面,但这应该是可选的。
答案 2 :(得分:-1)
您是否错过了页面上的<f:validateBean>
标记?我想你可能还需要调用Validator.validate(bean)
方法才能触发它。