CDI托管bean和JSF托管bean可以相互通信吗?

时间:2011-10-12 01:04:50

标签: jsf java-ee jsf-2 cdi managed-bean

我有一个Tomcat 6 JSF Web应用程序,我想用CDI bean设置它。我将不得不逐渐将项目转换为CDI。

我的问题是:可以将CDI bean和传统的JSF托管bean互相注入吗?

感谢。

1 个答案:

答案 0 :(得分:4)

所有JSF托管bean(JMB)都是自动CDI托管bean(CMB),或者可以使用 beans.xml 标记文件识别。 (CMB的要求设置得非常低,基本上只需要existence of a non-parameter constructor。)

这意味着您应该能够使用(读取:注入)所有JMB,几乎不需要额外的努力。

然而,问题将会出现,因为JMB使用的范围与CMB不同(javax.faces.*javax.enterprise.*

通过注册相对简单的CDI扩展可以最好地解决这些问题:当CDI服务器(Tomcat for you)启动时,它会引发一些您可以观察到的事件 - 这是您可以检测JMB和将它们转换为正确范围的CMB。

但是在你开始攻击之前:所有这些都已经由Seam 3 Faces module完成了。只需将它放在类路径中,所有JSF范围都桥接到CDI范围。