容器在@Inject和JSF时创建多个实例

时间:2015-03-11 10:03:36

标签: jsf-2 cdi managed-bean

我正在创建两个bean,将第一个bean注入第二个bean。 第二个bean为第一个bean设置set方法。 也是从JSF调用的第二个bean bean。

我需要容器创建一个实例,以便从第二个bean和JSF页面进行访问。

结果页面不包含第一个bean的数据,该数据是从第二个bean设置的。

我认为容器创建了两个实例。但为什么呢?

感谢。

代码:

###第一豆
@ManagedBean(name="a")
@Stateful

class A{

private String thing;

public String getThing();
public String setThing();

}
###第二豆
@ManagedBean(name="b")
@SessionScoped
@Stateful

class B{

@Inject
private A a;

a.setThing();

}
### JSF页面
<p:outputLabel value="#{a.thing}" />

1 个答案:

答案 0 :(得分:2)

您的@ManagedBeans(@MangagedBean,没有s),@SessionScoped@Stateful定位错误。他们应该在课堂之上。如果你开始使用@Inject,我可以建议转移到基于CDI的注释@Named及其相应的@SessionScoped(在不同的pacakge中)。有关正确的注释包,请参阅here