0

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

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

这可能吗?JSF 可以重用那个 beanHttpSession吗?@SessionScoped放豆子合法HttpSession吗?

4

1 回答 1

2

你的观察是正确的。在 JSF 的保护下,JSF 本身也将会话范围的托管 bean 存储为HttpSession. 因此,如果它已经存在,它将被重复使用,无论它是如何结束的。

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

于 2012-09-13T15:30:19.133 回答