Tomcat JSF会话BEan @Predestroy“会话已经失效”

时间:2016-02-18 17:50:47

标签: session jsf tomcat tomcat7

所以我尝试使用

@PreDestroy JSF托管bean上的@SessionScoped方法上访问HttpSessionenter image description here属性
session.getAttribute("myAttribute"); 

但我得到了

java.lang.IllegalStateException: getAttribute: Session has already been invalidated

为什么呢?

在我的一个会话bean被销毁之前,我需要访问该会话打开的外部服务的连接列表,它们当然存储在会话属性对象中。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

在会话范围的托管bean中显式访问会话属性没有意义。只需将该属性作为会话作用域托管bean本身的属性即可。

@SessionScoped
public class YourSessionScopedBean implements Serializable {

    private Object yourAttribute; // It becomes a session attribute already.

    @PreDestroy
    public void destroy() {
        // Just access yourAttribute directly, no need to do it the hard way.
    }

}

您遇到的例外情况是因为会话通过HttpSession#invalidate()调用显式无效,而不是"只是"过期。