我@NotNull在托管bean中添加了一些验证(),并突然收到此错误。任何想法可能会导致它吗?该应用程序在Apache Tomcat 7中运行。
@NotNull
javax.validation.ValidationException: Unable to find a default provider javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264) javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) javax.faces.validator.BeanValidator.validate(BeanValidator.java:271) javax.faces.component.UIInput.validateValue(UIInput.java:1127) javax.faces.component.UIInput.validate(UIInput.java:941) javax.faces.component.UIInput.executeValidate(UIInput.java:1189) javax.faces.component.UIInput.processValidators(UIInput.java:691) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080) javax.faces.component.UIForm.processValidators(UIForm.java:243) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080) javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180) com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
在应用程序服务器中,您的应用程序的类路径中似乎没有JSR 303 Bean验证提供程序。如果您使用的是GlassFish,它会更好,如果你可以验证存在bean- validator.jar的$GLASSFISH_INSTALL_ROOT/glassfish/modules目录; Glassfish 3.1使用此JAR(包含Hibernate Validator实现)充当默认的JSR 303 Bean验证提供程序。我怀疑您使用的是Glassfish的较旧版本,或不包含Bean验证提供程序的其他应用程序服务器。
bean- validator.jar
$GLASSFISH_INSTALL_ROOT/glassfish/modules
如果必须在类路径中包括Bean验证提供程序,请考虑阅读该ValidationProviderResolver接口的Java API文档,该文档指出:
ValidationProviderResolver
遵循此处描述的服务提供者模式,通过META- INF / services / javax.validation.spi.ValidationProvider文件的存在来标识Bean验证提供者。 每个META-INF / services / javax.validation.spi.ValidationProvider文件都包含ValidationProvider实现的列表,每个实现都表示一个提供程序。
遵循此处描述的服务提供者模式,通过META- INF / services / javax.validation.spi.ValidationProvider文件的存在来标识Bean验证提供者。
每个META-INF / services / javax.validation.spi.ValidationProvider文件都包含ValidationProvider实现的列表,每个实现都表示一个提供程序。
因此,如果确实在类路径中手动包含Bean验证提供程序,则必须确保META- INF/services/javax.validation.spi.ValidationProvider文件在类路径中存在,并且还包含Bean验证提供程序的名称。下面列出了Glassfish提供的内容的内容,它们指向Hibernate Bean Validator类:
META- INF/services/javax.validation.spi.ValidationProvider
org.hibernate.validator.HibernateValidator