7 个解决方案
#1
无人问津还是无人知晓啊,各位大侠帮帮忙
#2
琢磨出个名堂来了,就是在这个受管Bean中添加一个方法,并使用@PreDestroy注释,当关闭浏览器时,此时的SESSION只能等超时后,session才会销毁,同时保存在session范围的受管Bean也跟着被销毁,当受管Bean销毁前,将回调用@PreDestroy注释的方法,不过,发现该方法被调用2次,第一次是在sessionDestroyed回调之前,第二次是sessionDestroyed回调之后。sessionDestroyed是HttpSessionListener监听器方法,在session销毁之前将被回调。
以下是对PreDestroy注释的文档说明:
---------------------------------------
PreDestroy 注释作为回调通知用于各方法,以表示该实例正处于被容器移除的过程中。用 PreDestroy 注释的方法通常用于释放它已持有的资源。除 Java EE 5 中的应用程序客户端容器之外,所有支持 PostConstruct 的容器管理对象都必须支持此注释。应用 PreDestroy 注释的方法必须遵守以下所有标准:该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PreDestroy 的方法可以是 public、protected、package private 或 private;该方法不得是 static;该方法可以是 final;如果该方法抛出未检查异常,则忽略此异常,除非是能够处理异常的 EJB。
以下是对PreDestroy注释的文档说明:
---------------------------------------
PreDestroy 注释作为回调通知用于各方法,以表示该实例正处于被容器移除的过程中。用 PreDestroy 注释的方法通常用于释放它已持有的资源。除 Java EE 5 中的应用程序客户端容器之外,所有支持 PostConstruct 的容器管理对象都必须支持此注释。应用 PreDestroy 注释的方法必须遵守以下所有标准:该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PreDestroy 的方法可以是 public、protected、package private 或 private;该方法不得是 static;该方法可以是 final;如果该方法抛出未检查异常,则忽略此异常,除非是能够处理异常的 EJB。
#3
JSF 2 的受管Bean加入了视图作用域以及自定义作用域。另外,对于你说的问题(标记登录),可以看看 Seam、WebBeans 等框架的处理思路 :-)
#4
SessionBean 只要实现HttpSessionBindingListener接口就行了
#5
HttpSessionBindingListener早就考虑过了,标记登陆的功能我是通过受管Bean的属性赋值来实现的,而不是使用HttpSession的setAttribute,虽然受管Bean保存在Session范围内,但是通过valueBound和valueUnbound方法中的Session事件参数根本无法取到受管Bean,因而在HttpSession中,当Session被销毁时,根本无法跟踪受管Bean
#6
上面表述的是HttpSessionListener接口,它直接跟踪会话创建和销毁事件
HttpSessionBindingListener仅仅是跟踪HttpSession中属性的绑定与解绑事件
#7
听说过Seam,只是现在还没接触过,发现Seam对与JSF很重要,可能是对JSF的补充吧。我觉得JSF封装了请求和响应,使我们基本摆脱了Request和Response,在处理页面逻辑,界面事件,表单数据方面作用显著,但是在其他方面,比如这个会话跟踪,权限控制方面略显不足,HttpSessionListener应该是不属于JSF
#1
无人问津还是无人知晓啊,各位大侠帮帮忙
#2
琢磨出个名堂来了,就是在这个受管Bean中添加一个方法,并使用@PreDestroy注释,当关闭浏览器时,此时的SESSION只能等超时后,session才会销毁,同时保存在session范围的受管Bean也跟着被销毁,当受管Bean销毁前,将回调用@PreDestroy注释的方法,不过,发现该方法被调用2次,第一次是在sessionDestroyed回调之前,第二次是sessionDestroyed回调之后。sessionDestroyed是HttpSessionListener监听器方法,在session销毁之前将被回调。
以下是对PreDestroy注释的文档说明:
---------------------------------------
PreDestroy 注释作为回调通知用于各方法,以表示该实例正处于被容器移除的过程中。用 PreDestroy 注释的方法通常用于释放它已持有的资源。除 Java EE 5 中的应用程序客户端容器之外,所有支持 PostConstruct 的容器管理对象都必须支持此注释。应用 PreDestroy 注释的方法必须遵守以下所有标准:该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PreDestroy 的方法可以是 public、protected、package private 或 private;该方法不得是 static;该方法可以是 final;如果该方法抛出未检查异常,则忽略此异常,除非是能够处理异常的 EJB。
以下是对PreDestroy注释的文档说明:
---------------------------------------
PreDestroy 注释作为回调通知用于各方法,以表示该实例正处于被容器移除的过程中。用 PreDestroy 注释的方法通常用于释放它已持有的资源。除 Java EE 5 中的应用程序客户端容器之外,所有支持 PostConstruct 的容器管理对象都必须支持此注释。应用 PreDestroy 注释的方法必须遵守以下所有标准:该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PreDestroy 的方法可以是 public、protected、package private 或 private;该方法不得是 static;该方法可以是 final;如果该方法抛出未检查异常,则忽略此异常,除非是能够处理异常的 EJB。
#3
JSF 2 的受管Bean加入了视图作用域以及自定义作用域。另外,对于你说的问题(标记登录),可以看看 Seam、WebBeans 等框架的处理思路 :-)
#4
SessionBean 只要实现HttpSessionBindingListener接口就行了
#5
HttpSessionBindingListener早就考虑过了,标记登陆的功能我是通过受管Bean的属性赋值来实现的,而不是使用HttpSession的setAttribute,虽然受管Bean保存在Session范围内,但是通过valueBound和valueUnbound方法中的Session事件参数根本无法取到受管Bean,因而在HttpSession中,当Session被销毁时,根本无法跟踪受管Bean
#6
上面表述的是HttpSessionListener接口,它直接跟踪会话创建和销毁事件
HttpSessionBindingListener仅仅是跟踪HttpSession中属性的绑定与解绑事件
#7
听说过Seam,只是现在还没接触过,发现Seam对与JSF很重要,可能是对JSF的补充吧。我觉得JSF封装了请求和响应,使我们基本摆脱了Request和Response,在处理页面逻辑,界面事件,表单数据方面作用显著,但是在其他方面,比如这个会话跟踪,权限控制方面略显不足,HttpSessionListener应该是不属于JSF