如何从视图范围获取bean

时间:2012-02-07 07:57:43

标签: jsf-2

我想问一下,我是否将我的托管bean放在会话范围内,然后将其存储在会话中“就好像我有这样的bean

@ManagedBean
@SessionScoped
public class SessionScopedBean implements Serializable {

    .......

} //end of class SessionScopedBean

然后它存储在会话中,在我的会话期间,我可以使用

获取它
session.getAttribut("SessionScopedBean");

这将为我提供SessionScopedBean对象,当会话将被销毁时,我将获得null。现在我想问一下我是否有我的bean在视野范围内,那我怎么能得到它。像

@ManagedBean
@ViewScoped
public class ViewScopedBean implements Serializable {

    .......

} //end of class ViewScopedBean

现在如果视图是持久化的,那么这个bean处于视图状态,当视图发生变化时,这个bean将被破坏。现在我想问一下,如果视图持续存在,我怎样才能从视图状态获取这个bean。像

view.getAttrubute("ViewScopedBean");  //just a code. No actual implementation.

由于

1 个答案:

答案 0 :(得分:21)

它们存储在UIViewRoot#getViewMap()提供的视图中:

Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();
ViewScopedBean viewScopedBean = (ViewScopedBean) viewMap.get("viewScopedBean");
// ...

同样地,您应该使用ExternalContext#getSessionMap()提供的会话映射抽象(您最终希望在整个JSF代码中具有 javax.servlet导入声明) :

Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
SessionScopedBean sessionScopedBean = (SessionScopedBean) sessionMap.get("sessionScopedBean");
// ...

另见:


对具体问题

无关,这可能不是最好的方法。如果可能,请查看@ManagedProperty