猿问

如何使用@EJB,@ PersistenceContext,@ Inject,@ Autowired

如何使用@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也不起作用。

如何在验证器中注入服务依赖项以便我可以访问数据库?


白衣染霜花
浏览 309回答 1
1回答

守着一只汪

在@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" />这确实很尴尬。
随时随地看视频慕课网APP

相关分类

Java
我要回答