我正在为一个客户端工作,该客户端在空闲超时的情况下拥有自己的会话管理系统。会发生以下情况:
现在通过将 javax.faces.ViewState 传递给会话管理系统的POST请求来处理上述过程。但是,如果超时,请求中只需要8K的数据来处理和重定向。但是由于我的托管bean节省了大量数据(银行应用程序,需要跟踪计算!),请求的大小很高(大约20K),因为重定向失败。
那么有什么方法可以以某种方式保存ViewState?或者更好,我可以阻止超时的任何方式?像保持会话活着的东西?
我所有的托管bean都有session
范围。
编辑:如果需要,为了提高性能,web.xml中的javax.faces.STATE_SAVING_METHOD
context-param设置为client
。
答案 0 :(得分:1)
状态保存仅保留与当前视图关联的数据。这里的问题是会话作用域bean丢失了。我建议两种解决问题的方法:
1)实现HttpSessionListener并在其sessionDestroyed()方法中获取bean,将它们序列化并将它们存储在与当前用户关联的数据库行中。当用户再次登录时,您可以获取bean,反序列化它们并将它们放入用户的会话中。
2)实现ajax轮询,该轮询将在特定时间段内ping服务器,这样会话将不会超时。您可以使用Richfaces JSF库来实现这一点,该库具有用于ajax轮询的内置JSF组件。