我有一个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
实例并销毁它?
答案 0 :(得分:3)
你不能在不破坏某些东西的情况下安全地销毁CDI bean。它应该在其上下文结束时自动销毁(在这种情况下,当会话过期或无效时)
如果您希望早期发生破坏,请将范围缩小到ConversationScoped
(并设置其边界)或ViewScoped
(available in JSF 2.2,当用户导航到另一个视图时,将销毁该bean。