Viewscoped JSF和CDI bean

时间:2013-09-24 17:32:02

标签: jsf cdi view-scope

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

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

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

1 个答案:

答案 0 :(得分:9)

CDI @Inject“无处不在”,因此也在JSF @ManagedBean内部。 JSF对应@ManagedProperty仅在@ManagedBean内部工作。您也不能@Inject在任何CDI托管bean中使用真正的JSF托管bean(相反,它将是CDI托管实例)。也许这就是你正在阅读的内容。然而,普遍的共识确实最好不要混合使用它们以避免初学者之间的混淆。 JSF utility library OmniFaces与JSF 2.0 / 2.1具有CDI兼容@ViewScoped

@PreDestroy顺便提到CDI的,也不是对应的@PostConstruct。它们应该在CDI托管bean和JSF托管bean中都能正常工作。