5

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

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

谢谢。

4

1 回答 1

4

所有 JSF 托管 bean (JMB) 要么自动成为 CDI 托管 bean (CMB),要么可以使用beans.xml标记文件来识别。(CMB 的要求设置得非常低,基本上只规定了非参数构造函数的存在。)

这意味着您应该能够几乎不费吹灰之力地使用(阅读:注入)所有 JMB。

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

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

但在你开始破解之前: Seam 3 Faces 模块已经完成了所有这些工作。只需将它放在您的类路径中,所有 JSF 作用域都桥接到 CDI 作用域。

于 2011-10-16T19:51:41.547 回答