如何保持jsf bean超过2小时

时间:2013-10-09 04:28:59

标签: jsf

应用程序默认会话超时设置为30分钟,我需要保留一些bean数据超过2小时,JSF中是否有任何方法来实现这种情况?(比如定义自定义范围bean和设置为生命时间)最多2小时)。

提前致谢。

2 个答案:

答案 0 :(得分:1)

不,通常,当不再需要容器时,不可能阻止容器销毁JSF bean。

因此,您可以使用ApplicationScoped bean或Singleton EJB。

另一个解决方案是使用SessionScoped bean并设置不同的会话超时,但是在用户通过注销或关闭浏览器使会话无效后,您将丢失数据。

另一个解决方案是将数据保存到数据库,但我认为您已经考虑过了。

<强>链接

答案 1 :(得分:0)

除了应用程序范围的bean之外,@RequestScoped以上的每个范围都必须存储在Session中,因为没有其他地方可以存储JSF的数据。自定义范围无法更改。

因此,当你的会话在30分钟后被销毁时,一切都会丢失。最好的解决方案是通过在web.xml中设置会话超时(以分钟为单位)将其设置为更高的值:

<web-app ...>
<session-config>
    <session-timeout>120</session-timeout>
</session-config>
</web-app>

或以编程方式(以秒为单位):

HttpSession session = request.getSession();
session.setMaxInactiveInterval(120*60);

如果您只为那些需要2小时可用的bean设置@SessionScoped,并为其他所有内容使用@RequestScoped@ViewScoped,那么您的会话将只保留哪些数据你想保留2个小时,其他一切都会被删除更早。