我想知道在JSF2.0中设置和取消设置会话。虽然遵循一些博客和书籍(Core JavaServer Faces-3rd Edition),但我知道使用注释@SessionScoped我们可以将任何管理bean设置为会话。我有一个loginBean,它是@ManagedBean并声明了SessionScoped。在右上角,我的网站有登录按钮。
创建此会话时(我不是手动设置,这就是为什么我感到困惑),当我被摧毁?必须通过超时或单击“注销”按钮来销毁它。
答案 0 :(得分:1)
JSF使用Servlet API。会话范围的托管bean实质上被设置为HttpSession
的属性。只要第一次评估引用托管bean #{sessionBean}
的EL表达式,就会创建并设置它。每当会话到期时(通过重新启动客户端或服务器中的超时)或者无效,它将从会话中“删除”。如果您让退出按钮调用ExternalContext#invalidateSession()
,则会话将失效。
如果您熟悉基本的Servlet API,那么您应该已经了解了这一切是如何工作的。有关Servlet的HttpSession
工作的深入解释,请阅读此答案:How do servlets work? Instantiation, sessions, shared variables and multithreading。
答案 1 :(得分:0)
在jsf 2.0中,我们可以将总类ob设置为像我提到的会话
Class_name sm;
ExternalContext extContext = FacesContext.getCurrentInstance()。getExternalContext(); extContext.getSessionMap()。put(“给出访问此属性的名称”,sm);
Class_name sm =(Class_name)extContext.getSessionMap()。get(“给出访问此属性的名称”);