Jsf p:commandButton操作在p:confirmDialog中不起作用

Jsf p:commandButton操作在p:confirmDialog中不起作用,jsf,jsf-2,primefaces,dialog,Jsf,Jsf 2,Primefaces,Dialog,我有一个功能,我必须通过我的确认对话框调用我的托管bean,该对话框用于删除按钮。当用户单击delete按钮时,会弹出一个确认对话框,单击“是”的onclick,应该会调用我的相对托管bean。但是我做不到 <p:commandButton id="Delete" action="#{tbeanId.delete}" icon="ui-icon ui-icon-trash" value="Delete" title="GDeleteButton" ajax="false" oncl

我有一个功能,我必须通过我的确认对话框调用我的托管bean,该对话框用于删除按钮。当用户单击delete按钮时,会弹出一个确认对话框,单击“是”的
onclick
,应该会调用我的相对托管bean。但是我做不到

<p:commandButton id="Delete" action="#{tbeanId.delete}" icon="ui-icon ui-icon-trash" 
   value="Delete" title="GDeleteButton" ajax="false" onclick="PF('groupDeleteConfirm').show();" type="button">
   <p:confirm header="Delete Record" message="Are you sure about deleting this record?" icon="ui-icon-alert"/>
</p:commandButton>

<p:confirmDialog global="true" showEffect="fade" hideEffect="explode" widgetVar="groupDeleteConfirm">
   <p:commandButton title="GDelYesButton" value="Yes" oncomplete="PF('groupDeleteConfirm').hide()" " />
   <p:commandButton title="GDelNoButton" value="No" onclick="PF('groupDeleteConfirm').hide()" type="button" />
</p:confirmDialog>


当您将
p:confirmDialog
global=“true”
一起使用时,确认/取消按钮(有些不直观)由以下两个样式类标识:

styleClass="ui-confirmdialog-yes"
styleClass="ui-confirmdialog-no"
然后将调用该操作,并自动执行show()/hide()。Ajax在主按钮上应该是正确的,您不需要
type=“button”
,所以总的来说,它会简单得多:

<p:commandButton id="delete" 
                 action="#{trafficExpenseItemsMBean.deleteExpenseItemsGroup}" 
                 icon="ui-icon ui-icon-trash" 
                 value="Delete" 
                 title="GDeleteButton">
    <p:confirm header="Delete Record" 
               message="Are you sure about deleting this record?" 
               icon="ui-icon-alert"/>
</p:commandButton>

<p:confirmDialog global="true" showEffect="fade" hideEffect="explode">
    <p:commandButton title="GDelYesButton" value="Yes" styleClass="ui-confirmdialog-yes"/>
    <p:commandButton title="GDelNoButton" value="No" styleClass="ui-confirmdialog-no" />
</p:confirmDialog>

另一个选择是使其非全球性。然后,您需要将操作移动到yes按钮,并将消息移动到p:confirmDialog,如中所示

<p:commandButton id="delete" 
                 icon="ui-icon ui-icon-trash" 
                 value="Delete" 
                 title="GDeleteButton"
                 onclick="PF('groupDeleteConfirm').show()">
</p:commandButton>
<p:confirmDialog message="Are you sure about deleting this record?" 
                 showEffect="fade"
                 hideEffect="explode" 
                 widgetVar="groupDeleteConfirm">
    <p:commandButton title="GDelYesButton" 
                     value="Yes" 
                     action="#{trafficExpenseItemsMBean.deleteExpenseItemsGroup}" 
                     oncomplete="PF('groupDeleteConfirm').hide()" 
                     update=":growl"/>
    <p:commandButton title="GDelNoButton" 
                     value="No" 
                     oncomplete="PF('groupDeleteConfirm').hide()"/>
</p:confirmDialog>


我不确定您是否真的想要按钮上的
title
,因为它们会显示给用户。

当您使用
p:commandButton
执行需要在服务器上执行的操作时,您不能使用
type=“button”
因为这是用于执行自定义javascript的按钮,而不会向服务器发出ajax/非ajax请求

为此,您可以分配type属性(默认值为“submit”),也可以显式使用
type=“submit”


希望这能帮助别人

Jaqen:我很感谢你对JSF的回答。我有一个类似的问题,正如前面提到的这个问题。你能帮我一下吗。