我们正在为我们的应用程序使用SUN JSF 1.2,WebSphere 7.0,我们只在负载测试期间获得ViewExpiredException
我已经通过以下链接
javax.faces.application.ViewExpiredException: View could not be restored
跟随了大部分内容,
设置上下文参数
com.sun.faces.enableRestoreView11Compatibility 真正
通过在所有JSP页面的顶部添加以下代码,指示浏览器不缓存动态JSF页面,
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
res.setHeader("Pragma", "no-cache");
res.setDateHeader("Expires", -1);
当我们手动浏览应用程序时,我们没有得到异常。我无法弄清楚这个问题。
请提供建议。
答案 0 :(得分:2)
视图存储在会话中。存储在会话中的默认最大视图量为15,这是Mojarra可由com.sun.faces.numberOfViewsInSession
上下文参数配置的。
想象一下这样一种情况,即最终用户在同一会话中的至少16个不同浏览器选项卡/窗口中打开一个带有表单(实际上是一个视图)的随机JSF页面。然后,在第一个打开的选项卡/窗口中提交表单将抛出ViewExpiredException
。也许在负载测试期间也会发生同样的情况。负载测试应该更好地创建不同的会话。
正如您自己发现的答案中所述,唯一的解决方法是将JSF状态保存方法设置为client
而不是server
。禁用浏览器缓存只会阻止最终用户从浏览器缓存中获取的页面上出现ViewExpiredException
(例如,通过按后退按钮等)。