1

我们正在为我们的应用程序使用 SUN JSF 1.2、WebSphere 7.0,我们仅在负载测试期间收到 ViewExpiredException

我已经通过下面的链接

javax.faces.application.ViewExpiredException:无法恢复视图

追了大部分的东西,

  1. 设置上下文参数,

    com.sun.faces.enableRestoreView11Compatibility true

  2. 通过在所有 JSP 页面顶部添加以下代码,指示浏览器不缓存动态 JSF 页面,

        res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
        res.setHeader("Pragma", "no-cache");
        res.setDateHeader("Expires", -1); 
    

当我们手动浏览应用程序时,我们没有遇到异常。我无法弄清楚这个问题。

友善的建议。

4

1 回答 1

2

视图存储在会话中。会话中存储的默认最大视图数量为 15,这在 Mojarra 中可由com.sun.faces.numberOfViewsInSession上下文参数配置。

想象这样一种情况,其中最终用户在同一会话中的至少 16 个不同的浏览器选项卡/窗口中打开带有表单(实际上是一个视图)的随机 JSF 页面。然后在第一个打开的选项卡/窗口中提交表单将抛出ViewExpiredException. 也许在负载测试期间也会发生同样的情况。负载测试应该更好地创建不同的会话。

正如您自己找到的答案中所述,唯一的解决方法是将 JSF 状态保存方法设置为client而不是server. 禁用浏览器缓存只是防止ViewExpiredException最终用户从浏览器缓存中获得的页面上发生这种情况(例如,通过按下后退按钮等)。

于 2012-07-31T11:03:11.370 回答