如何使用@EJB,@ PersistenceContext,@ Inject,@ Autowired注入@FacesValidator我怎么可以注入的依赖一样@EJB,@PersistenceContext,@Inject,@AutoWired,等的@FacesValidator?在我的具体情况下,我需要通过以下方式注入Spring托管bean @AutoWired:@FacesValidator("emailExistValidator")public class EmailExistValidator implements Validator {
@Autowired
private UserDao userDao;
// ...}然而,它没有被注射,它仍然存在null,导致java.lang.NullPointerException。看来@EJB,@PersistenceContext并且@Inject也不起作用。如何在验证器中注入服务依赖项以便我可以访问数据库?
1 回答
守着一只汪
TA贡献1872条经验 获得超3个赞
在@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" />
这确实很尴尬。
添加回答
举报
0/150
提交
取消