2014-06-24 111 views
0

我只在Chrome浏览器(IE和Firefox - 没有问题)上点击返回按钮时发生ViewExpiredException。只有当前一个视图有一些Ajax更新时才会发生这种情况。JSF 2.1:ViewExpiredException:单击浏览器后退按钮时:仅限Chrome浏览器

  1. 负载home.xhtml(比方说,javax.faces.viewState序列 - 1)
  2. 请在home.xhtml一些Ajax更新(比方说,javax.faces.viewState序 - 2)
  3. PRG并再次返回home.xhtml(比方说,javax.faces.viewState-sequence-3)
  4. 按Chrome后退按钮。
  5. 页面加载。 (现在视图是有javax.faces.viewState序列-2 - ISSUE是不是有新的序列ID - 4它得到以前的序列ID - 2。这意味着页面可能会从缓存中加载。因为我删除了以前来自服务器的视图,序列号-2的视图不存在)。
  6. 任何点击(发回/ ajax)显示ViewExpiredException。

注意:如果上述步骤2中被跳过,不存在问题,如下面的

  1. 负载home.xhtml(比方说,javax.faces.viewState序列 - 1)
  2. PRG,并再次去home.xhtml(比方说,javax.faces.viewState序列 - 3)
  3. 按下浏览器后退按钮
  4. 页面负载。 (这是有javax.faces.viewState序列 - 4 - 没有问题,这意味着页面不是从缓存加载)
  5. 任何点击(回发/ ajax) - 没有问题。

请注意,我在MyFaces 2.1.8上,并且我也使用BalusC建议的NoCacheFilter。这就是为什么IE和Firefox没有任何问题,但问题只在于Chrome,而且只有当前一个视图具有Ajax更新时。

任何帮助或指示解决问题或你的第一个想法,非常感谢。

请让我知道,如果有任何信息,我可能错过了,你可能想知道。

更新:14年6月27日

在上述情况下,请指教,如果我可以手动创建和构建视图时恢复视图返回回送过程中无效,使用定制的ViewHandler。 我已经检查了问题的答案,Can you POST to JSF2 page with an expired session?。但它在我的设置中不起作用,并显示空白页。任何想法。是因为我使用MyFaces 2.1.8,它具有不同的状态管理器实现?

非常感谢。 最好的问候, 库马尔。

回答

0

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

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

我以前有类似的问题。

我解决它以下列方式:

  1. 运行Chrome浏览器,然后按F12执行Developer工具
  2. 菜单栏上
  3. 选择资源,然后单击饼干
  4. 选择你的网站名称和全部清除饼干。

它为我工作。