2014-06-09 74 views
0

我有一個jsf 1.2應用程序,在索引頁中有一些鏈接。這個鏈接被點擊操作,在新的jQuery對話框中運行。每個鏈接都在不同的對話框中打開我的應用程序的新頁面,因此,應用程序可以在單個頁面中的許多對話框中打開許多鏈接。我所有的託管bean都有會話範圍。JSF中的Ajax表單更新顯示ViewExpiredException

我的問題是,當我打開一個新的對話框並點擊裏面的任何鏈接時,我的應用程序仍然正常工作,但是在此之後,如果我點擊我的索引頁中的其他鏈接打開另一個對話框,一個ViewExpiredException。我試圖將我的jsf更新爲2.0,在web.xml中將EnableRestoreView11Compatibility設置爲true,在我的beans中使用keepAlive,但沒有任何效果。

我認爲它的發生是因爲我有一個狀態的主頁,當我點擊打開一個jQuery對話框中的新頁面時,它會加載整個頁面並將html放在裏面。所以,請求沒有提及主頁的狀態。我該如何解決這個問題?

+0

您正在使用的時?您是否在點擊鏈接或彈出靜態頁面時撥打服務電話? – Dinal

+0

嗨@Dinal,謝謝你的回答。我正在使用一個函數來打開對話框。這個函數創建一個div,用其他頁面填充並打開jquery對話框。我正在使用a4j:commandButton。是的,該頁面是一個發送到服務器的jsp頁面。 –

+0

我認爲它是一個純粹的JavaScript功能。如果你沒有使用任何actionListener調用,爲什麼使用richfaces。正常標籤將服務器的目的rt? – Dinal

回答

1

好像這是不固定的是,它計劃於固定在JSF 2.3

您可以使用下面的解決方法在java.net張貼的jqueryJSF的bug。

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

感謝回答,但這不是問題...我試過這個。問題是,當我的對話框顯示時,會創建一個新的viewstate。當我使用這個新的對話框時,jsf改變和更新這個視圖狀態,但不是其他的(如果我有很多對話框,每個對話框都有你的視圖狀態)。所以,當我關閉我的對話框並點擊主頁面(使用非更新的視圖狀態)時,會顯示堆棧跟蹤。我發現這個問題的鏈接:http://www.irian.at/en/blog/-/blogs/jsf-ajax-and-multiple-forms –

+0

@PedroVítor我錯過了你使用Ajax來更新多個表單頁。我已經從java.net的參考編輯我的答案 –

+0

嗯,我讀了這個,似乎正是我需要!我現在不能做這些改變,但明天會做。希望這適用於JSF 1.2 ... –