具有多个作用域的托管Bean



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

是否可以为同一个bean同时对会话和请求进行作用域划分?

例如,我有一个bean myBean,它可以是Session-ScopedRequest-Scoped吗?

编辑

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

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

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

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

可以使用FacesContext以编程方式将同一个bean实例放置到多个作用域中。

然而,这种豆子的存在表明了一个设计缺陷。

您可以用多个作用域对托管bean进行注释。该代码将在没有错误的情况下编译和部署(使用Mojarra 2.1.3/Glassfish 3.1.1进行测试)

然而,其效果将是始终应用最窄的范围。因此,如果使用@SessionScoped@RequestScoped对bean进行注释,那么bean将处于请求范围内。

相关内容

  • 没有找到相关文章

最新更新