应用程序默认会话超时设置为30分钟,我需要保留一些bean数据超过2小时,JSF中是否有任何方法来实现这种情况?(比如定义自定义范围bean和设置为生命时间)最多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个小时,其他一切都会被删除更早。