2013-10-24 52 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)}"