2012-03-13 89 views
1

我对你的专家Managed Bean的一个以上的范围

一个简单的问题

是否有可能同时拥有会话范围和请求范围为同一个bean?

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

编辑

做一些试验后,我决定消灭这是会话范围的第一次会议。

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

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

回答

0

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

但是,效果将始终是最狭​​窄的范围将被应用。所以如果你用@SessionScoped@RequestScoped注释你的bean,这个bean将在请求范围内。

1

通过defining it in a faces-config.xml file可以在两个不同的作用域中定义一个相同类型的bean。通过这样的表达式#{sessionScope.myBean}#{requestScope.myBean}

它可以在同一Bean实例放入一个以上的范围以编程方式使用FacesContext引用时这将导致两个不同的实例。

但是,这种豆的存在暗示了设计缺陷。

+0

所以最好有两个豆子? – sameer 2012-03-13 11:52:15

+0

很难说。设计中至少有一个严重的缺陷。 – BalusC 2012-03-13 14:23:24

+0

@BalusC通过使用facescontext来销毁会话bean之后,通过任何方式设置bean以请求作用域? – sameer 2012-03-14 05:22:14