如何删除CDI会话作用域bean

时间:2014-05-07 12:38:39

标签: jsf jsf-2 cdi

我有一个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变量始终为null。如何检索loginBean实例并销毁它?

1 个答案:

答案 0 :(得分:3)

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