【问题标题】:javax.faces.application.ViewExpiredException: During load testjavax.faces.application.ViewExpiredException:负载测试期间
【发布时间】:2012-07-28 21:00:00
【问题描述】:

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

我已经浏览了下面的链接

javax.faces.application.ViewExpiredException: View could not be restored

大部分的东西都看过了,

  1. 设置上下文参数,

    com.sun.faces.enableRestoreView11兼容性 真的

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

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

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

请多多指教。

【问题讨论】:

    标签: java jsf jsf-1.2 viewexpiredexception


    【解决方案1】:

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

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

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

    【讨论】:

    • 但是 BalusC,作为一种性能调整,在它提到的大多数链接中具有服务器端保存与客户端保存相比是好的。所以也必须考虑到这一点。
    • 我没有说过客户端状态保存比服务器端状态保存更快。我只说过对特定ViewExpiredException 的唯一修复是使用客户端状态保存。是否使用它取决于您。
    • 对不起!出于混淆,我无意说您告诉客户端状态保存比服务器端状态保存更快。我只是在问一个建议。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多