【问题标题】:Ajax form updates in JSF shows ViewExpiredExceptionJSF 中的 Ajax 表单更新显示 ViewExpiredException
【发布时间】:2014-07-30 00:45:05
【问题描述】:

我有一个 jsf 1.2 应用程序,在索引页中有一些链接。此链接通过点击打开,在新的 jquery 对话框中。每个链接都会在不同的对话框中打开我的应用程序的新页面,因此,应用程序可以在单个页面的多个对话框中打开多个链接。我所有的托管 bean 都有会话范围。

我的问题是,当我打开一个新对话框并单击其中的任何链接时,我的应用程序仍然可以正常工作,但是在此之后,如果我单击索引页面中的其他链接以打开另一个对话框,应用程序会向我显示ViewExpiredException。我尝试将我的 jsf 更新为 2.0,将 web.xml 中的 EnableRestoreView11Compatibility 设置为 true,在我的 bean 中使用 keepAlive,但没有任何效果。

我认为它的发生是因为我有一个具有一种状态的主页,当我单击以在 jquery 对话框中打开一个新页面时,它会加载整个页面并将 html 放入其中。因此,请求没有参考主页的状态。我该如何解决这个问题?

【问题讨论】:

  • 你在使用 吗?您是在单击链接时拨打服务电话还是只是将静态页面显示为弹出窗口?
  • 嗨@Dinal,感谢您的回答。我正在使用一个函数来打开对话框。此函数创建一个 div,用其他页面填充它并打开 jquery 对话框。我正在使用 a4j:commandButton。是的,该页面是一个发送到服务器的 jsp 页面。
  • 我认为它是一个纯 JavaScript 功能。如果您不使用任何 actionListener 调用,为什么要使用richfaces。普通的 标签将服务于目的 rt?
  • 不,因为我的托管 bean 中有一个 actionListener 方法可以在用户单击链接时执行一些操作。我的 a4j:commandLink 有一个 actionListener 来处理请求和一个 oncomplete 来调用 javascript 函数。
  • 看看这个来自@BalusC stackoverflow.com/questions/11408130/…的答案

标签: java jquery jsf jsf-1.2 viewexpiredexception


【解决方案1】:

好像JSF的bug还没修复,计划在JSF 2.3修复

您可以将java.net 中发布的以下解决方法用于jquery

http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-790

var patchJSF = function () {
  jsf.ajax.addOnEvent(function (e) {
    if (e.status === 'success') {
      $("partial-response:first changes:first update[id='javax.faces.ViewState']", 
       e.responseXML).each(function (i, u) {
        // update all forms
        $(document.forms).each(function (i, f) {
          var field = $("input[name='javax.faces.ViewState']", f);
          if (field.length == 0) {
           field = $("<input type=\"hidden\" name=\"javax.faces.ViewState\" />").
                    appendTo(f);
          }
          field.val(u.firstChild.data);
        });
      });
    }
  });
}

【讨论】:

  • 感谢回答,但这不是问题...我已经尝试过了。问题是,当我的对话框显示时,会创建一个新的视图状态。当我使用这个新对话框时,jsf 会更改并更新此视图状态,但不会更新其他视图状态(如果我有很多对话框,每个对话框都有您的视图状态)。因此,当我关闭对话框并单击主页(具有未更新的视图状态)时,会显示堆栈跟踪。我找到了这个问题的链接:irian.at/en/blog/-/blogs/jsf-ajax-and-multiple-forms
  • @PedroVítor 我错过了您使用 Ajax 更新页面上的多个表单。我已经参考 java.net 编辑了我的答案
  • 嗯,我读了这个,似乎正是我需要的!我现在不能做改变,但明天会做。希望这适用于 JSF 1.2...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 2011-10-05
  • 2013-02-25
  • 2011-03-18
  • 2015-07-19
  • 2012-09-04
  • 2011-01-08
相关资源
最近更新 更多