2013-10-24 83 views
0

我創建了一個每行都有一個刪除按鈕的組件。點擊刪除按鈕時,將調用confirmDialog,並在對話框中單擊「是」時,該行將被刪除。Primefaces 3.4 Datatable在刪除行後無法正確刷新

表刷新,但在UI上刪除了錯誤的行。在bean上,正確的記錄被刪除。在UI端,刪除的行始終是最後一行,無論您選擇刪除哪一行。

刪除按鈕位於數據表本身中,並且confirmDialog位於數據表外,但位於同一表單中。

有誰知道什麼是錯的?

<p:commandButton icon="ui-icon ui-icon-trash" 
     update="@form" 
     oncomplete="del_confirmation.show()" 
     value="Delete" 
     immediate="true"> 
     <f:setPropertyActionListener value="#{item}" 
     target="#{Bean.recToDelete}"/> 
</p:commandButton> 


<p:confirmDialog widgetVar="del_confirmation" 
message="Confirm Delete?" 
header="Delete Dialog" showEffect="explode" 
hideEffect="explode" modal="true"> 
<div align="center"> 
    <p:commandButton id="delBtn" 
     icon="ui-icon ui-icon-check" 
     value="Yes" 
     actionListener="#{Bean.deleteRecord()}" 
     update="@form" 
     oncomplete="del_confirmation.hide()" 
     immediate="true" 
     ajax="true" /> 
    <p:commandButton 
     icon="ui-icon ui-icon-cancel" 
     value="No" 
     onclick="del_confirmation.hide()" /> 
</div></p:confirmDialog> 
+0

盡力縮小使用更換f:setPropertyActionListener的情況下,仔細檢查每一行項目都有一個唯一的ID,確保相關的ID正在被刪除,之後再次檢查它是否從項目列表中刪除...使用system.out .... – Daniel

+0

嗨丹尼爾,謝謝你的建議。但是,因爲我已經驗證了它在後端bean中的作用,我懷疑它與數據表的緩存或類似方面更相關。這是否有效? –

+1

只顯示數據表代碼'p:datatable' ...表中沒有緩存,也可以嘗試刪除直接並使用'action =「替換'f:setPropertyActionListener''{{myBean.myDeleteMethod(item) }「' – Daniel

回答

1

顯示您的數據表的代碼,只有p:datatable ...

有表中沒有緩存,也嘗試刪除immediate並通過action="#{myBean.myDeleteMethod(item)}"