jsf - Viewscoped JSF 和 CDI bean

标签 jsf cdi view-scope

我在 JBoss EAP 6 上使用 Java EE 6,我的 JSF bean 的注释如下:@ManagedBean @ViewScoped (均来自 javax.faces.bean 包)

但是,它们也是 CDI bean(默认构造函数,使用 @Inject@PreDestroy 等)。我一直在阅读,您不能混合使用这些注释(JSF 和 CDI),但它显然工作正常:注入(inject)工作正常,在 View 更改时调用 preDestroy 等)。

我错过了什么吗?问题是什么?为什么不使用?

最佳答案

CDI @Inject “无处不在”,因此也适用于 JSF @ManagedBean . JSF 对应 @ManagedProperty@ManagedBean 内工作只要。你也不能@Inject任何 CDI 托管 bean 中的真正 JSF 托管 bean(相反,它将是 CDI 托管实例)。也许这就是您正在阅读的内容。然而,普遍的共识确实是最好不要混合它们以避免在初学者之间产生混淆。 JSF utility library OmniFaces具有与 CDI 兼容的 @ViewScoped 对于 JSF 2.0/2.1。
@PreDestroy顺便说一下不是 特定于 CDI,它的对应物也不是 @PostConstruct .它们在 CDI 托管 bean 和 JSF 托管 bean 中应该都能正常工作。

关于jsf - Viewscoped JSF 和 CDI bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18988276/

相关文章:

jsf - @ViewScoped bean 在 JSF 中如何以及何时被销毁?

java - 不要传递 <f :param in jsf 的值

java - 动态加载样式表(xhtml 文件)

带有 jetty-maven-plugin 和 cdi 的 Maven 项目无法正常工作

jsf - 为什么 @PostConstruct 回调每次都会触发,即使 bean 是 @ViewScoped 的? JSF

没有 @ViewScoped 的 JSF

css - PrimeFaces panelGrid 中的透明背景色

java - 使用带有 PrimeFaces 的 JSF 单击菜单后 CSS 丢失

jakarta-ee - 急切 CDI bean 实例化的干净解决方案

java - 如何从 Request Scope bean 访问 ApplicationScoped bean 中的 ArrayList