Jsf 2 已经在HttpSession中的@SessionScoped@ManagedBean会发生什么情况?
旧代码在ServletFilter中的第一个请求时创建一个Jsf 2 已经在HttpSession中的@SessionScoped@ManagedBean会发生什么情况?,jsf-2,myfaces,Jsf 2,Myfaces,旧代码在ServletFilter中的第一个请求时创建一个@SessionScoped@ManagedBean(即UserSession),并将其放入HttpSession(如果还没有) 现在,当某个EL表达式第一次尝试访问该ManagedBean时会发生什么?我希望有第二个UserSession(一个是手动创建的,另一个是来自JSF的)。因此,我用一些日志语句插入构造函数、@PostConstruct和@PreDestroy。现在看来,JSF从未创建用户会话——只调用构造函数 这可能吗?JSF
@SessionScoped@ManagedBean
(即UserSession
),并将其放入HttpSession
(如果还没有)
现在,当某个EL表达式第一次尝试访问该ManagedBean时会发生什么?我希望有第二个UserSession
(一个是手动创建的,另一个是来自JSF的)。因此,我用一些日志语句插入构造函数、@PostConstruct
和@PreDestroy
。现在看来,JSF从未创建用户会话
——只调用构造函数
这可能吗?JSF可以重用来自
HttpSession
的bean吗?将@SessionScoped
bean放入HttpSession
中是否合法?您的观察是正确的。在JSF的掩护下,JSF本身也将会话范围的托管bean存储为HttpSession
的属性。因此,如果它已经存在,它将被重用,不管它以何种方式在那里结束
这是好是坏取决于具体的功能需求。考虑到您的惊讶,我猜这很糟糕,您需要修改方法或功能需求。也许您需要一个辅助(会话范围?)托管bean,它通过@ManagedProperty
注入特定的会话属性