除了会话到期以外,还有哪些其他情况可能导致ViewExpiredException?
最终用户在会话中请求/创建了太多视图,并且正在提交旧视图。每个会话的默认最大观看次数为15。换句话说,如果最终用户在同一会话中具有表单的页面上打开16个浏览器窗口/选项卡并提交给第一个,则用户可以获取ViewExpiredException
。
每个会话的最大观看次数可web.xml
通过以下方式配置
<context-param>
<param-name>com.sun.faces.numberOfViewsInSession</param-name>
<param-value>15</param-value>
</context-param>
有关其他参数,另请参见Mojarra常见问题解答。
有没有一种方法可以引入额外的日志记录来找出在每种情况下都会触发此异常的非常特殊的情况?
不是通过JSF和/或ViewExpiredException
。整个异常仅表示该视图不再存在于会话中。这反过来可能确实有更多的潜在原因。使用a记录会话的创建和销毁,HttpSessionListener
以及记录会话属性的修改byHttpSessionAttributeListener
可能会有所帮助。
,在包含表单的缓存页面上按浏览器后退按钮,然后再提交表单,这实际上也可能导致ViewExpiredException
视图过期。这可以通过以下两种方法来解决,最好是将它们结合使用: