如何从视图范围获取bean

Bas*_*sit 11 jsf-2

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

@ManagedBean
@SessionScoped
public class SessionScopedBean implements Serializable {

    .......

} //end of class SessionScopedBean
Run Code Online (Sandbox Code Playgroud)

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

session.getAttribut("SessionScopedBean");
Run Code Online (Sandbox Code Playgroud)

这将给我SessionScopedBean对象,当会话将被销毁时,我将得到null.现在我想问一下我的bean是否在视野范围内,那我怎么能得到它.喜欢

@ManagedBean
@ViewScoped
public class ViewScopedBean implements Serializable {

    .......

} //end of class ViewScopedBean
Run Code Online (Sandbox Code Playgroud)

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

view.getAttrubute("ViewScopedBean");  //just a code. No actual implementation.
Run Code Online (Sandbox Code Playgroud)

谢谢

Bal*_*usC 22

它们存储在视图中,如下所示UIViewRoot#getViewMap():

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

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

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

也可以看看:


具体问题无关,这可能不是最好的方法.看看@ManagedProperty是否可能.