2011-09-30 69 views
0

我提到了这个问题范围的bean和我类似的问题 JSF - Get the SessionScoped Bean instance获取会话的当前实例在JSF 2.0

我希望得到一个托管bean的当前实例在另一个托管bean。我有一个SuperBean,它在一个基类BaseBean中进行了扩展。 我在baseBean中设置了一个list - itemList的值。列表的getter setter在SuperBean中,我应该在BackingBean中使用这个SuperBean来获取itemList的值。

我尝试使用 -

 Application app = FacesContext.getCurrentInstance().getApplication(); 
     ValueBinding vb = app.createValueBinding("#{superbean}"); 
     SuperClass superclass = (SuperClass) vb.getValue(FacesContext.getCurrentInstance()); 

当我尝试打印superclass.getItems(); - 它仅仅给出了这一点 - []

而且也在于此 -

SuperClass superclass = (SuperClass)FacesContext.getCurrentInstance(). 
         getExternalContext().getSessionMap().get("superbean"); 

当我尝试用这种打印 - 它抛出异常,因为我superbean项不存在于sessionMap即使进入放置在facesConfig中,也可以@ManagedBean和@sessionscoped

请帮我解决这个问题。

+0

所提问题的解决方案没有帮助吗?如果您使用'@ ManagedProperty'注释,我认为您不需要SuperBean。我认为如果你只引用子类的属性,你的超类不会被intantiated。 –

+0

@ManagedProperty注解必须在我的BackingBean中给出它吗? – JaveDeveloper

+0

用示例添加了答案 –

回答

2

如果注入的bean具有相同或更宽的范围,则可以将托管bean注入另一个托管bean。这里是一个例子:

@ManagedBean(name = "oneBean") 
@ViewScoped 
public class OneBean{ 
    // injections 
    @ManagedProperty(value = "#{anotherBean}") 
    private AnotherBean anotherBean; 

    // don't forget to add getter and setter for anotherBean 
    ... 
}