CDI管理的Bean和JSF管理的Bean可以相互通信吗?

5

我有一个Tomcat 6的JSF Web应用程序,想要使用CDI bean进行设置。不过我需要逐步将项目转换为CDI。

我的问题是:CDI Bean和传统的JSF托管Bean能够互相注入吗?

谢谢。

1个回答

4
所有JSF管理的Bean(JMB)都可以自动成为CDI管理的Bean(CMB),或者可以使用beans.xml标记文件识别为这样的Bean。(CMB的要求非常低,基本上只需要具有存在非参数构造函数。)
这意味着您几乎不需要额外的努力就可以使用(读取:注入)所有JMB。
但是,由于JMB使用不同的作用域与CMB(javax.faces.* vs. javax.enterprise.*),会出现问题。
最好的解决方法是注册一个相对简单的CDI扩展程序:当CDI服务器(对于您来说是Tomcat)启动时,它将引发一些事件,您可以观察到这些事件-这是您可以检测JMB并将其转换为正确作用域的CMB的地方。

但在你开始编程之前:所有这些都已经被Seam 3 Faces模块完成了。只需将其放入类路径中,所有JSF作用域都将桥接到CDI作用域。


有趣,我会去看看。谢谢! - Jon Onstott
是的,看起来Seam 3 Faces桥接了JSF托管bean和CDI bean。 - Jon Onstott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接