我需要在服务器或客户端中保留一些状态,以允许我的用户继续在搜索结果页面中搜索关键字。(它是某些产品的基本搜索引擎,其第一页是谷歌,搜索结果是第二页。
我尝试了推荐的解决方案:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
并将其与
session.setMaxInactiveInterval(10);
用于测试。但似乎状态没有保存,在下一个POST
单击keywords
,我的SessionScoped
豆子products
丢失了。
有解决办法吗?解决方法?向用户显示your session expired
错误消息真的很尴尬,他们甚至不需要登录。
会话范围的 bean 绑定到 HTTP 会话。当它过期时,它们将被重新创建。
您可能打算使用视图范围的 Bean。它不绑定到 HTTP 会话,而是绑定到 JSF 视图状态。当您使用客户端状态保存时,它永远不会过期,正如您实际配置的那样。
另一种方法是直接无状态,简单地使用请求范围的 bean(通过表单中的纯 HTML 隐藏字段保留状态;基本上你正在接管javax.faces.ViewState
的工作)。
另请参阅:
- 如何选择合适的豆类范围?
- javax.faces.application.ViewExpireException: View 无法恢复