如何设置视图超时?
Posted
技术标签:
【中文标题】如何设置视图超时?【英文标题】:How can I set the view timeout? 【发布时间】:2012-09-15 18:16:40 【问题描述】:在我们的 JBoss 7.1.1 上的 JSF2 项目中,我们在 web.xml
中定义了会话超时,它工作得很好。
但是,有时我们会遇到视图过期,即使会话仍然存在,也会导致类似这样的错误:
javax.faces.application.ViewExpiredException: viewId:/... - View /... could
not be restored.
我们可以在哪里设置查看超时,就像我们为会话所做的那样?还是其他原因导致的视图过期?
【问题讨论】:
【参考方案1】:ViewExpiredException
的另一个原因是在会话中创建了太多 逻辑视图。默认限制是特定于 JSF 实现的,特定视图上的每个同步 GET 请求基本上都会创建一个新视图。因此,例如,当您使用 Mojarra(默认限制为 15)并启动浏览器会话并在 16 个不同选项卡中打开相同视图,然后在第一个选项卡中提交表单时,您也可能会遇到此异常.该限制可使用 JSF 实现特定的上下文参数进行配置,Mojarra 中为 com.sun.faces.numberOfLogicalViews
,MyFaces 中为 org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION
(默认为 20)。
然而,这是一个非常罕见的现实世界问题。如果您的 web 应用程序确实设计为以这种方式使用(例如,邀请在多个选项卡中打开的社交/社区网站,例如讨论论坛或问答),那么您可能会考虑使用客户端状态保存。
另见:
javax.faces.application.ViewExpiredException: View could not be restored com.sun.faces.numberOfViewsInSession vs com.sun.faces.numberOfLogicalViews【讨论】:
嗯,看起来不错,谢谢。但无论如何,是否有视图过期超时,如果有,它的生命周期是如何定义的? 除了会话超时没有超时。正如回答的那样,您可以设置更高的“最大视图”设置。当您通过 GET 请求第一次请求视图时会创建一个视图,并且只要您回发到它而不导航到其他视图(如在 ajax 回发和返回 null/void 操作中),它就会一直存在。以上是关于如何设置视图超时?的主要内容,如果未能解决你的问题,请参考以下文章