所以我尝试使用
在@PreDestroy
JSF托管bean上的@SessionScoped
方法上访问HttpSession的属性
session.getAttribute("myAttribute");
但我得到了
java.lang.IllegalStateException: getAttribute: Session has already been invalidated
为什么呢?
在我的一个会话bean被销毁之前,我需要访问该会话打开的外部服务的连接列表,它们当然存储在会话属性对象中。
我该怎么做?
答案 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()
调用显式无效,而不是"只是"过期。