JSF中的Ajax表单更新显示ViewExpiredException



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

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

我认为它的发生是因为我有一个主页与一个状态,当我点击打开一个新的页面在一个jquery对话框,它加载整个页面,并把html里面。因此,请求没有引用主页面的状态。我该如何解决这个问题?

似乎JSF中的错误尚未修复,计划在JSF 2.3中修复

对于jquery,您可以使用java.net中发布的以下解决方案。

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);
        });
      });
    }
  });
}

相关内容

  • 没有找到相关文章

最新更新