我在JBoss EAP 6上使用Java EE 6,我的JSF bean注释如下:
@ManagedBean @ViewScoped
(均来自javax.faces.bean
包)
但是,它们也是CDI bean(默认构造函数,使用@Inject
,@PreDestroy
等)。我一直在阅读你不能混合这些注释(JSF和CDI),但它显然工作正常:注入正在工作,preDestroy在视图更改时被调用等)。
我错过了什么吗?问题是什么?为什么不用?
答案 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中都能正常工作。