Session 如何设置视图超时?

Session 如何设置视图超时?,session,jsf-2,view,timeout,Session,Jsf 2,View,Timeout,在JBoss 7.1.1上的JSF2项目中,我们在web.xml中定义了一个会话超时,它可以正常工作 但是,有时我们会遇到视图过期问题,即使会话仍处于活动状态,也会导致类似这样的错误: javax.faces.application.ViewExpiredException: viewId:/... - View /... could not be restored. 我们可以在哪里设置查看超时,就像在会话中一样?或者视图过期是由其他原因引起的?另一个原因是会话中创建的逻辑视图太多。默认限制

在JBoss 7.1.1上的JSF2项目中,我们在
web.xml
中定义了一个会话超时,它可以正常工作

但是,有时我们会遇到视图过期问题,即使会话仍处于活动状态,也会导致类似这样的错误:

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

我们可以在哪里设置查看超时,就像在会话中一样?或者视图过期是由其他原因引起的?

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

然而,这是一个非常罕见的现实世界问题。如果你的WebApp真的被设计成这样使用(例如,一个社会/社区站点,它被邀请在多个选项卡中打开,比如讨论论坛或问答),那么你可以考虑使用客户端状态保存来代替。 另见:

嗯,看起来不错,谢谢。但是无论如何,是否存在视图过期超时?如果存在,它的寿命是如何定义的?除了会话超时之外,没有其他超时。不过,答案是“最大视图”设置,您可以将其设置得更高。当您通过GET请求首次请求视图时,将创建一个视图,只要您回发到该视图而不导航到其他视图(如ajax回发和返回null/void操作),该视图就会一直存在。