在
@FacesValidator不被注入容器管理。你需要使其成为托管bean。使用Spring
@Component,CDI @Named或JSF
@ManagedBean代替,
@FacesValidator以便使其成为托管bean,从而有资格进行依赖项注入。
例如,假设你要使用JSF
@ManagedBean:
@ManagedBean@RequestScopedpublic class EmailExistValidator implements Validator { // ...}你还需要通过#{name}EL 将其作为托管bean进行引用,而不是作为硬编码字符串中的验证器ID 进行引用。这样
<h:inputText ... validator="#{emailExistValidator.validate}" />要么
<f:validator binding="#{emailExistValidator}" />代替
<h:inputText ... validator="emailExistValidator" />
要么
<f:validator validatorId="emailExistValidator" />
这确实很尴尬。JSF伙计们已经证实了这一令人尴尬的监督,他们将使@FacesValidator(和
@FacesConverter)合格的目标成为即将到来的JSF。2.22.3,另请参阅JSF规范发行763。对于EJB,有一种解决方法,可以从JNDI手动获取它,另请参见在@FacesConverter和@FacesValidator中获取@EJB。如果碰巧使用了CDI扩展MyFaces CODI,那么你也可以通过@Advanced在类上添加注释来解决它。



