如何设置视图超时?

Xav*_*ois 10 session timeout view jsf-2

在我们的JBoss 7.1.1上的JSF2项目中,我们定义了一个会话超时web.xml,它工作得很好.

但是,有时候我们会看到视图过期,导致像这样的错误,即使会话仍然存在:

javax.faces.application.ViewExpiredException: viewId:/... - View /... could 
not be restored.
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 15

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

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

也可以看看:

  • 除会话超时外没有超时.但是,您可以设置更高的"最大视图"设置.当您第一次通过GET请求请求视图时,会创建一个视图,只要您回发到该视图而不导航到另一个视图(如在ajax回发中并返回null/void操作),就会生成视图. (3认同)