在保持状态的同时摆脱ViewExpiredException

时间:2015-06-11 15:00:47

标签: jsf jsf-2

我需要在服务器或客户端中保留一些状态,以允许我的用户继续在搜索结果页面中搜索关键字。 (它是某些产品的基本搜索引擎,具有像第一页一样的谷歌,搜索结果第二页。)

我尝试了推荐的解决方案:

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

并将其与

结合使用
session.setMaxInactiveInterval(10);

进行测试。但似乎状态未保存,并且在下一次POST点击时,我keywords bean中的productsSessionScoped将丢失。

有解决方案吗?解决方法?向用户显示your session expired错误消息真的很尴尬,用户甚至不需要登录。

1 个答案:

答案 0 :(得分:1)

会话范围的bean与HTTP会话绑定。当它到期时,那么,它们将被重新创建。

您可能想要使用视图范围的bean。它不依赖于HTTP会话,而是依赖于JSF视图状态。当您使用客户端状态保存时,它将永远不会过期,因为您实际已配置。

另一种方法是只使用无状态并简单地使用请求范围的bean(状态通过表单中的纯HTML隐藏字段保留;基本上你已经接管javax.faces.ViewState的工作)

另见: