【问题标题】:How to remove a CDI session scoped bean [duplicate]如何删除 CDI 会话范围的 bean [重复]
【发布时间】:2014-06-24 10:44:06
【问题描述】:

我有一个 CDI bean 定义如下:

@Named("loginBean")
@SessionScoped
public class LoginBean implements Serializable {
    @EJB
    private LoginManager loginManager;

    private String username;
    private String password;

现在我想以编程方式将其从会话范围中删除:

HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
LoginBean ins = (LoginBean)session.getAttribute("loginBean");

但ins 变量始终为空。如何检索loginBean 实例并销毁它?

【问题讨论】:

标签: jsf jsf-2 cdi


【解决方案1】:

你不能在不破坏某些东西的情况下安全地破坏 CDI bean。它应该在其上下文结束时自动销毁(在这种情况下,当会话过期或无效时)。
如果您希望提前进行销毁,请将范围缩小到ConversationScoped(并设置其边界)或ViewScoped(available in JSF 2.2,当用户导航到另一个视图时,bean 将被销毁)。

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 2012-01-20
    • 2014-07-17
    • 2012-05-11
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多