我有一个简单的问题要问各位专家
是否可以为同一个bean同时对会话和请求进行作用域划分?
例如,我有一个bean myBean
,它可以是Session-Scoped
和Request-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将处于请求范围内。