0

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

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

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

4

1 回答 1

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);
        });
      });
    }
  });
}
于 2014-06-09T17:06:21.303 回答