我怎样才能像注入的依赖@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
并且@Injec
t也不起作用。
如何在验证器中注入服务依赖项,以便可以访问数据库?
在@FacesValidator
不被注入容器管理。你需要使其成为托管bean。使用Spring @Component
,CDI @Named或JSF @ManagedBean
代替,@FacesValidator
以便使其成为托管bean,从而有资格进行依赖项注入。
例如,假设你要使用JSF @ManagedBean
:
@ManagedBean
@RequestScoped
public 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在类上添加注释来解决它。
问题内容: 当前,我正在使用PersistenceContext注入EntityManager。EM被完美注入。 现在,我尝试装饰Bean,然后突然没有注入em。我得到一个NullPointerException。 我知道EJB和CDI是2个完全不同的管理器,所以一个都不知道另一个。我期望@PersistenceContext是EJB注入点,而@Inject是CDI。我应该怎么做才能解决这个问题并
问题内容: 我的战争包含以下内容: persistence.xml: web.xml: 我的TestServlet类如下: package com.test.service; 调用get()方法时,我得到一个NullPointerException; 尚未注入EntityManager。关于我可能缺少的或如何诊断的任何建议?服务器日志中几乎没有。 我确定我在没有jboss-web.xml或web.
问题内容: 我试图将在Spring上下文中定义的bean注入到CDI托管组件中,但没有成功。不会注入Bean,而是在每次执行注入时都会创建一个新实例。我的环境是带有JBoss Weld的Tomcat 7。 Spring ApplicationContext很简单: CDI托管bean如下所示: 这是我的 但是,当我从JSF页面访问属性时,每次访问时都会创建一个新实例。这是一个简单的示例: 我得到以
我的项目中有无状态实体bean(EJB3.x)和EJBbean(EJB2.x)以及其他类。我想将实体Bean注入EJB Bean。到目前为止,我能够使用JNDI方式(即BeanName#completename)注入它,但我想使用@EJB注入它,就像我们在没有任何JNDI查找的情况下将实体bean注入另一个实体bean一样。这两个bean都是不同模块的一部分,但部署在同一台服务器上。我将weblo
在包含DAO的第三部分jar库中,我在使用@PersistenceUnit注入EntityManagerFactory时遇到问题。 这是我的多模块maven项目结构。 我用CDI把所有的东西连接起来== 但是当我把@PersistenceUnit注释放在核心项目中时,它就不起作用了。(该字段为空) 当我在EJB项目中使用@PersistenceUnit时,一切正常。 我的坚持。xml文件位于EJB
问题内容: 这是我的java类: 这是单元测试: 测试失败,因为没有任何人注入。我应该如何正确处理这种情况?是否存在最佳实践? 问题答案: 如果没有像Spring这样的容器(或诸如基于Spring的Unitils之类的容器),则必须手动注入实体管理器。在这种情况下,您 可以 将以下内容用作基类: