使用p:commandButton进行意外的整页刷新

unexpected whole page refresh using p:commandButton

本文关键字:刷新 意外 commandButton 使用      更新时间:2023-09-26

我正在使用以下代码删除p:datatable中的行。如果我在p:commandbutton标签内使用onclick方法,它会刷新整个页面,否则它工作正常。请给我一些解决方案。

<p:commandButton title="Delete Affiliation" immediate="true" process="@this"
    update="affiliationList" alt="Delete Affiliation" icon="ui-icon-trash"
    action="#{readAuthorDetailsbean.deleteSelectedAffiliation}" style="width:30px"
    onclick="return confirm('Are you sure, Do you want to delete this record?');">
    <f:setPropertyActionListener value="#{affiliation}" 
        target="#{readAuthorDetailsbean.selectedAffilliationListAL}" />
</p:commandButton>

如果将onclick属性改写为
if (!confirm('Are you sure, Do you want to delete this record?')) return false;
那么它应该如预期的那样工作。它的作用是:

  • 如果用户确认它没有返回值,PrimeFaces可以进一步处理AJAX请求
  • 如果用户取消确认,则返回的值为false,并且中止进一步的处理

如果您只执行return confirm('Are you sure?'),并且用户确信,则返回的true值会取消PrimeFaces在onclick属性末尾添加的return false(对于ajax是这样做的),并且您看到的不是ajax请求,而是正常的后期提交(页面重载)
return false取消html元素的默认行为。