0

我开始使用Inject而不是ManagedProperty. 我做了一些测试,在其中一个测试中,我将一个ViewScopedbean ( Bean1) 注入到另一个Bean2具有相同范围的 ( ) 中:

@Inject
private Bean1 bean1;

Bean1 有一个item代表艺术家的变量,而艺术家有许多不同的字段,例如:名称、专辑列表等。

在 Bean2 中,我需要访问 Bean1 中的项目:

Artist artist = bean1.getItem();

当我在该行上设置断点以查看里面的内容Bean1时,我可以看到变量item,但是当我展开时item,没有设置任何字段。

如果我尝试使用调试器进入该getItem()方法,我会收到以下消息:

Thread http-listener-1(2) stopped at beans.Bean1$Proxy$_$$_WeldClientProxy.getItem - compiled without debug info.

使用调试器降低一行,然后查看artist变量,所有字段都已设置为正确的值。这个怎么可能?之前一切都是空的。

Edit1:如果我替换InjectManagedProperty、 更改javax.faces.view.ViewScopedjavax.faces.bean.ViewScoped并在调试方面执行相同的步骤,我可以看到item设置了中的字段。我也可以步入方法getItem()

4

1 回答 1

0

如果你切换@ManagedProperty@Inject你可能会忘记javax.faces.bean.*包中的所有注释。其原因是不能将 JSF 自己的依赖注入机制与 CDI 混合在一起,否则会导致意外行为。

于 2013-09-11T17:59:05.103 回答