2012-08-24 33 views
2

我試圖使用a4j:poll組件爲ajax在一段時間間隔後重新加載數據表。它工作正常,但是當表自動重新加載,並且我使用最後一列中的工具(編輯/刪除行)時,數據表(所有行)消失,我必須手動加載它(使用h:commandButton)..a4j:輪詢 - 重新加載數據模型

這裏是我的代碼部分:

<h:form> 
    <a4j:poll id="poll" interval="30000" action="#{bean.load}" enabled="#{bean.pollEnabled}" render="list" /> 
</h:form> 

<h:form id="list" ...> 
<rich:dataTable id="table" var="item" value="#{bean.model}"> 
... 

一個按鈕,這是調用相同的負載方法:

<h:commandButton id="btn" action="#{bean.load}" ... /> 

當我重新加載使用按鈕的話,我可以使用這些工具在最後一列。你不知道爲什麼嗎?

enter image description here

UPDATE:

  • 看來,在第一種情況下(a4j:poll),使用時編輯/刪除,bean的構造函數被調用........
  • bean是@ViewScoped
+0

如果你把它們放在同一個表單中怎麼辦? – BalusC

+0

你真的是最偉大的!:-)謝謝,它的作品。請創建一個答案接受它 – gaffcz

+0

好吧,我轉貼它作爲答案:) – BalusC

回答

2

看來,在第一種情況下(A4J:民意調查),使用時編輯/刪除,bean的構造函數被調用

我不做RichFaces的,但我猜這個問題就是以某種方式與JSF issue 790相關,這會導致其他表單的視圖狀態在由單獨表單發起的ajax請求期間丟失(事實上也會導致與其他表單關聯的後臺bean的重構)。這也被描述爲commandButton/commandLink/ajax action/listener method not invoked or input value not updated的第7點。

在您的具體情況下,將<a4j:poll>放置在與表格相同的表格中即可解決問題。我不確定爲什麼這是首先放在一個單獨的表格中,但這似乎沒有必要。

+0

它被分開,因爲它重新加載兩個分離的表單(在實際應用程序中)。所以我認爲這會更好地被分離:-)無論如何,它在一個窗體內效果更好,再次感謝:-) – gaffcz