在Tomcat上运行的JSF应用程序中:在@Inject
中使用ConstraintValidator
会导致javax.validation.ValidationException
: HV000028:isValid调用期间出现意外异常。
在应用程序的其他地方,CDI可以正常工作。
ConstraintValidator
:
public class MyIntervalValidator implements ConstraintValidator<MyInterval, Integer> {
@Inject
private Interval interval;
public void initialize(MyInterval myIntervall) {
}
public boolean isValid(Integer i, ConstraintValidatorContext ctx) {
Integer ceiling;
ceiling = interval.getCeiling();
if ((0 <= i) && (i <= ceiling)) {
return true;
}
return false;
}
我检查了注入:interval
在执行方法null
期间为isValid
。
Interval
:
@SessionScoped
public class Interval implements Serializable {
private static final long serialVersionUID = 1L;
@Min(value = 1)
private Integer ceiling;
public Interval() {
this.ceiling = 1;
}
public Integer getCeiling() {
return ceiling;
}
public void setCeiling(Integer ceiling) {
this.ceiling = ceiling;
}
}
context.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="BeanManager"
auth="Container"
type="javax.enterprise.inject.spi.BeanManager"
factory="org.jboss.weld.resources.ManagerObjectFactory" />
</Context>
来自web.xml
的详细信息:
<resource-env-ref>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>
javax.enterprise.inject.spi.BeanManager
</resource-env-ref-type>
</resource-env-ref>
有关环境的信息:
weld-servlet-core
(2.4.1.Final;文件夹bean.xml
中的空WEB-INF
)hibernate-validator
(5.3.3.Final)com.sun.faces
(2.2.14)非常感谢您的帮助。
答案 0 :(得分:0)
您应该在依赖项中包含Hibernate Validator CDI集成模块:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>5.3.3.Final</version>
</dependency>
您的设置中可能缺少这个?