【发布时间】:2013-09-11 07:57:41
【问题描述】:
我开始使用Inject 而不是ManagedProperty。我已经进行了一些测试,在其中一个测试中,我将一个 ViewScoped bean (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:如果我将Inject 替换为ManagedProperty,从javax.faces.view.ViewScoped 更改为javax.faces.bean.ViewScoped 并执行相同的调试步骤,我可以看到@ 中的字段987654339@ 已设置。我也可以步入方法getItem()。
【问题讨论】:
-
这里的实际问题是什么?你的 bean 没有被注入?
-
它似乎被注入了,但后来我得到空指针异常。我的具体问题是为什么我看不到
item中的字段,为什么我不能进入方法getItem()以及为什么artist最终还是被设置了。
标签: jsf dependency-injection cdi jsf-2.2