【问题标题】:Managed Bean with more than one scope具有多个范围的托管 Bean
【发布时间】:2012-03-29 13:32:51
【问题描述】:

我有一个简单的问题请教各位专家

同一个 bean 是否可以同时拥有 Session-Scoped 和 Request-Scoped?

例如,我有一个豆子myBean,它可以同时是Session-Scoped 和Request-Scoped吗?

编辑

在做了一些试验之后,我决定销毁第一个会话范围的会话。

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("SessionBean1");

有没有办法可以将它重新初始化为请求范围的请求?

【问题讨论】:

    标签: java jsf request managed-bean session-scope


    【解决方案1】:

    defining it in a faces-config.xml file 可以在两个不同的作用域中定义相同类型的 bean。当通过 #{sessionScope.myBean}、#{requestScope.myBean} 等表达式引用时,这将导致两个不同的实例。

    可以使用FacesContext 以编程方式将同一个bean 实例放入多个范围。

    但是,此类 bean 的存在表明存在设计缺陷。

    【讨论】:

    • 所以最好有两个豆子?
    • 很难说。你的设计至少肯定有严重缺陷。
    • @BalusC 在使用 facescontext 销毁会话 bean 后,有什么方法可以将 bean 设置为请求范围?
    【解决方案2】:

    您可以使用多个范围注释托管 bean。代码将无错误地编译和部署(使用 Mojarra 2.1.3 / Glassfish 3.1.1 测试)。

    但是,效果将是始终应用​​最窄的范围。因此,如果您使用 @SessionScoped 和 @RequestScoped 注释您的 bean,该 bean 将在请求范围内。

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多