JSF 2.1:ViewExpiredException:单击浏览器后退按钮时:仅限Chrome

时间:2014-06-24 17:19:29

标签: google-chrome jsf jsf-2

我正在查看' ViewExpiredException'点击后退按钮,仅在Chrome浏览器中(IE和Firefox - 没问题)。仅当前一个视图有一些ajax更新时才会发生这种情况。

  1. 加载home.xhtml(让我们说,javax.faces.viewState-sequence - 1)
  2. 在home.xhtml上做一些Ajax更新(让我们说,javax.faces.viewState-sequence - 2)
  3. PRG并再次访问home.xhtml(让我们说,javax.faces.viewState-sequence - 3)
  4. 按Chrome返回按钮。
  5. 页面加载。 (现在视图有javax.faces.viewState-sequence - 2 - ISSUE而不是新的序列id - 4它正在获取前一个序列id - 2.这意味着页面可能正在从Cache加载。因为我删除了以前的来自服务器的视图,序列ID为2的视图不存在。)
  6. 任何点击(回发后/ ajax)都会显示ViewExpiredException。
  7. 注意:如果跳过上面的第2步,则没有问题,如下所示

    1. 加载home.xhtml(让我们说,javax.faces.viewState-sequence - 1)
    2. PRG并再次访问home.xhtml(让我们说,javax.faces.viewState-sequence - 3)
    3. 按Chrome返回按钮
    4. 页面加载。 (它有javax.faces.viewState-sequence - 4 - NO ISSUE。这意味着页面不是从Cache加载的)
    5. 任何点击(回发后/ ajax) - 没问题。
    6. 请注意我在MyFaces 2.1.8上,我也按照BalusC的建议使用NoCacheFilter。这就是为什么IE和Firefox没有问题,但问题只出在Chrome上,而且只有当前一个视图有ajax更新时才会出现问题。

      非常感谢任何帮助或指针来解决问题或您的第一个想法。

      如果我可能错过了您可能想知道的任何信息,请告诉我。

      更新:2014年6月27日

      在上面的情况中,如果我可以使用自定义ViewHandler 在回发期间恢复的视图返回null时手动创建和构建视图,请提供建议。 我已经检查了问题的答案Can you POST to JSF2 page with an expired session?。但它在我的设置中不起作用,它显示空白页面。任何的想法。是因为我使用的是MyFaces 2.1.8,它有不同的状态管理器实现吗?

      非常感谢提前。 最好的祝福, 库马尔。

2 个答案:

答案 0 :(得分:1)

之前我遇到过类似的问题。

我通过以下方式解决了这个问题:

  1. 运行Chrome并按F12执行开发人员工具
  2. 在菜单栏上选择“资源”,然后单击“Cookies
  3. 选择您的网站名称并清除所有Cookie。
  4. 它对我有用。

答案 1 :(得分:0)

刚刚解决了这个问题。在页面中有多个表单,每个表单都有一个隐藏的输入javax.faces.viewState。当加载后退导航页面时,如果上一页有一些ajax调用,则Chrome正在从缓存加载这些状态输入。我的修复是在所有表单上自动完成,隐藏的输入现在从缓存加载新鲜。我希望这可以帮助有需要的人。

<script> 
    $(function(){
        $('form').attr("autocomplete", "off");
    });
</script>