【问题标题】:how to get beans from view scope如何从视图范围获取 bean
【发布时间】:2012-02-28 16:09:27
【问题描述】:

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

@ManagedBean
@SessionScoped
public class SessionScopedBean implements Serializable {

    .......

} //end of class SessionScopedBean

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

session.getAttribut("SessionScopedBean");

这会给我 SessionScopedBean 对象,当会话被销毁时,我会得到空值。现在我想问一下我的 bean 是否在视图 Scope 中,那么我怎样才能得到它。喜欢

@ManagedBean
@ViewScoped
public class ViewScopedBean implements Serializable {

    .......

} //end of class ViewScopedBean

现在如果视图是持久的,那么这个 bean 处于视图状态,当视图改变时,这个 bean 将被销毁。现在我想问一下,如果视图持久,我如何从视图状态中获取这个 bean。喜欢

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

谢谢

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    它们存储在 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

    【讨论】:

    • viewMap viewMap.get("viewScopedBean"); 的参数是 EL 名称吗?这仅适用于 JSF 管理的 bean 吗?如果是这样,我如何获得 CDI 管理的、视图范围的 bean(Seam 3)? -> stackoverflow.com/questions/42008956/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2014-08-26
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多