gpt4 book ai didi

jsf-2 - 删除/销毁 session 范围的 CDI 托管 bean

转载 作者:行者123 更新时间:2023-12-02 06:00:06 26 4
gpt4 key购买 nike

我有一个 session 范围的 CDI 托管 bean:

@Named
@SessionScoped
public class SampleBean implements Serializable {
// ...
}

我需要在某个流程之后从 session 中删除这个 bean,我使用了以下代码,如 Removing specific CDI managed beans from session 中所示:

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.getSessionMap().remove("sampleBean");

但是,它不起作用,SampleBean 仍保留在 session 中。
我错过了什么吗?

最佳答案

与 JSF 托管 Bean 相反,CDI 托管 Bean 并不直接按其托管 Bean 名称存储在 session 映射中。相反,它们由 CDI 管理器实现(Weld、OpenWebBeans 等)使用例如 session ID 作为 key 。

因此,您在那里使用的技巧不适用于 CDI 托管 bean。您需要寻找替代方法。在这种特殊情况下,正确的方法是使用 @ConversationScoped 而不是 @SessionScoped。在正确设计的 Web 应用程序中,永远不需要手动终止作用域。因此,使用 @SessionScoped 进行对话/流程一开始就已经是错误的。

关于jsf-2 - 删除/销毁 session 范围的 CDI 托管 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com