我想问一下,我是否将我的托管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.
由于
答案 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
。