Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 已经在HttpSession中的@SessionScoped@ManagedBean会发生什么情况?_Jsf 2_Myfaces - Fatal编程技术网

Jsf 2 已经在HttpSession中的@SessionScoped@ManagedBean会发生什么情况?

Jsf 2 已经在HttpSession中的@SessionScoped@ManagedBean会发生什么情况?,jsf-2,myfaces,Jsf 2,Myfaces,旧代码在ServletFilter中的第一个请求时创建一个@SessionScoped@ManagedBean(即UserSession),并将其放入HttpSession(如果还没有) 现在,当某个EL表达式第一次尝试访问该ManagedBean时会发生什么?我希望有第二个UserSession(一个是手动创建的,另一个是来自JSF的)。因此,我用一些日志语句插入构造函数、@PostConstruct和@PreDestroy。现在看来,JSF从未创建用户会话——只调用构造函数 这可能吗?JSF

旧代码在ServletFilter中的第一个请求时创建一个
@SessionScoped@ManagedBean
(即
UserSession
),并将其放入
HttpSession
(如果还没有)

现在,当某个EL表达式第一次尝试访问该ManagedBean时会发生什么?我希望有第二个
UserSession
(一个是手动创建的,另一个是来自JSF的)。因此,我用一些日志语句插入构造函数、
@PostConstruct
@PreDestroy
。现在看来,JSF从未创建
用户会话
——只调用构造函数


这可能吗?JSF可以重用来自
HttpSession
的bean吗?将
@SessionScoped
bean放入
HttpSession
中是否合法?

您的观察是正确的。在JSF的掩护下,JSF本身也将会话范围的托管bean存储为
HttpSession
的属性。因此,如果它已经存在,它将被重用,不管它以何种方式在那里结束

这是好是坏取决于具体的功能需求。考虑到您的惊讶,我猜这很糟糕,您需要修改方法或功能需求。也许您需要一个辅助(会话范围?)托管bean,它通过
@ManagedProperty
注入特定的会话属性