从会议中删除豆(Removing beans from session)

2019-10-21 04:04发布

我有一些@SessionScoped CDI豆。 以前他们都是JSF管理的bean(JSF从改变管理豆CDI管理的bean)。

我在做类似下面的删除一些会话范围JSF管理后,用户成功地放置在网上下订单。

Map<String, Object> sessionMap = context.getSessionMap();

sessionMap.remove("cartBean");
sessionMap.remove("orderItems");
sessionMap.remove("reviewOrderBean");
sessionMap.remove("intermediateLocaleBean");
sessionMap.remove("localeBean");
sessionMap.remove("currencyRateBean");
sessionMap.remove("currency");

让一切都被设置为默认顺序处理完成后。 这是不相关的破坏/其中用户不能注销之后订单处理成功终止整个HTTP会话无效。


不像JSF管理的bean,CDI豆存储到一些CDI管理器实现像焊接服务器的内存中。 因此,它们不提供会话地图- Map<String, Object>

这怎么可能就CDI豆反正模拟?


更新:

焊缝文档 :

请记住,一旦bean被绑定到上下文,直到它的背景被破坏仍然在这方面。 有没有办法手动从上下文中移除豆。 如果你不想让豆在会议上坐无限期,可以考虑使用具有短寿命的另一范围,如请求或对话范围。

所以,我认为,这是很难手动摧毁一个bean不破坏别的东西。

Answer 1:

CDI 1.1引入AlterableContext与界面destroy(Bean<T>)方法。

通过获取会话上下文beanManager.getContext(SessionScoped.class)低垂到AlterableContext ,然后调用destroy()与适当的Bean类型。



文章来源: Removing beans from session
标签: jsf cdi jsf-2.2