如何设置视图超时?

时间:2012-09-24 09:43:52

标签: session jsf-2 view timeout

在JBoss 7.1.1上的 JSF2 项目中,我们在web.xml中定义会话超时,它运行正常。

然而,有时我们会看到视图过期,即使会话仍然存在,也会导致类似这样的错误:

javax.faces.application.ViewExpiredException: viewId:/... - View /... could 
not be restored.

我们可以在哪里设置视图超时,就像我们为会话所做的那样?或者视图是否由其他内容引起?

1 个答案:

答案 0 :(得分:15)

ViewExpiredException的另一个原因是在会话中创建了太多逻辑视图。默认限制是特定于JSF实现,并且特定视图上的每个同步GET请求基本上都会创建一个新视图。因此,例如,当您使用Mojarra(默认限制为15)并启动浏览器会话并在16个不同的选项卡中打开相同的视图然后在第一个中提交表单时,您也可能会遇到此异常。该限制可以使用JSF实现特定的上下文参数进行配置,Mojarra为com.sun.faces.numberOfLogicalViews,MyFaces为org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION(默认为20)。

然而,这是一个非常罕见的现实问题。如果您的webapp真的被设计为以这种方式使用(例如,邀请在多个选项卡中打开的社交/社区站点,例如讨论论坛或Q& A),那么您可以考虑使用客户端状态保存。

另见:

相关问题