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

发布于 2024-12-09 08:46:11 字数 133 浏览 1 评论 0 原文

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

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

谢谢。

I have a Tomcat 6 JSF web application that I'd like to set up with CDI beans. I will have to convert the project to CDI gradually though.

My question is: can CDI beans and traditional JSF managed beans be injected into each other?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

つ可否回来 2024-12-16 08:46:11

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

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

但是,由于 JMB 使用与 CMB 不同的作用域(javax.faces.*javax.enterprise.*),因此会出现问题。

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

但在开始黑客攻击之前:所有这些都已由 Seam 3 Faces 模块。只需将其放入类路径中,所有 JSF 作用域都会桥接到 CDI 作用域。

All JSF managed beans (JMB) either are CDI managed beans (CMB) automatically, or can be recognized as such using the beans.xml marker file. (The requirements of a CMB are set very low and basically just dictate the existence of a non-parameter constructor.)

This means that you should be able to use (read: inject) all JMBs with almost no extra effort.

However, problems will arise because JMBs use different scopes than CMBs (javax.faces.* vs. javax.enterprise.*)

These are best solved by registering a relative simple CDI-extension: When the CDI server (Tomcat for you) starts, it will raise a couple of events that you can observe - this is be the place where you can detect JMBs and convert them into correctly scoped CMBs.

But before you start hacking: All this has already been done by the Seam 3 Faces module. Simply put it in your classpath, and all JSF-scopes are bridged to CDI-scopes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文