已经在HttpSession中的@SessionScoped @ManagedBean会发生什么?

时间:2012-09-13 15:04:05

标签: jsf-2 myfaces

旧代码在ServletFilter中的第一个请求中创建@SessionScoped @ManagedBean(即UserSession)并将其放入HttpSession(如果尚未存在)。

现在当一些EL表达式第一次尝试访问ManagedBean时会发生什么?我期待UserSession的第二个实例(一个手动创建,一个来自JSF)。所以我使用一些日志记录语句对构造函数@PostConstruct@PreDestroy进行了检测。现在似乎JSF从未创建UserSession - 只调用构造函数。

这可能吗? JSF可以从HttpSession重用该bean吗?将@SessionScoped bean放在HttpSession中是否合法?

1 个答案:

答案 0 :(得分:2)

你的观察是正确的。在JSF的封面下,JSF本身也将会话范围的托管bean存储为HttpSession的属性。因此,如果它已经存在,它将被重用,无论它最终如何结束。

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