如何将Hibernate验证器集成到Tomcat 7中



我已经成功地集成了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 jar,所以我没有添加它们。

我的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验证器不工作。我确实看到它被检测到,但不再记录:

Mar 11, 2014 9:31:40 PM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 5.1.0.Final

有什么问题吗?

最后我发现这是Mojarra回归。Hibernate验证器现在可以使用MyFaces了

只是为了避免混淆(因为我一直感到困惑,寻找错误,尽管它已经解决了,因为我没有看到更新部分在帖子的末尾),让我代表OP添加答案:

似乎OP使用了一个坏了的Mojarra版本。他们通过迁移到MyFaces解决了这个问题(参见问题的更新)。顺便说一下,我用Mojarra 2.2.12尝试了他们的例子,它工作得很好。

当您说您与Tomcat 7集成时,您是如何做到的?在应用服务器中有一些粘合代码,以确保ValidatorFactory对JSF是可见的。我不确定你是否也需要这样的服务。

您是否启用了调试/跟踪日志记录来验证Validator是否启动或被调用?

也可以尝试添加到JSF页面,但这应该是可选的。

您是否错过了页面上的<f:validateBean>标记?我认为你可能还需要调用Validator.validate(bean)方法,以便让它着火。

相关内容

  • 没有找到相关文章

最新更新