<p:commandbutton>操作在<p:dialog>中不起作用

我有一个对话框,里面有一个面板。 问题是“保存”button的操作方法不起作用。 它甚至不调用这个方法。 我可以达到def的方法。 与ctrl + lm所以方法名称没有问题。

<h:body> <h:form id="createAppUserForm" prependId="false"> .... <p:dialog id="newRoleDialogId" header="Add New Role" resizable="true" draggable="true" widgetVar="newRoleDetailsDialog" appendToBody="true" > <p:panel id="newRoleDialogPanel"> <p:panelGrid id="newRoleDialogPanelGrid" columns="2" style="width: 100%" styleClass="panelGridWithoutBorder"> <h:outputText value="Role Name :"/> <p:inputText value="#{createAppUserController.selectedRole.name}"/> <h:outputText value="Role Desc :"/> <p:inputText value="#{createAppUserController.selectedRole.description}"/> </p:panelGrid> <center> <p:commandButton value="Save" update="roleListDataTable newRoleDialogPanelGrid growlCreateAppUser" oncomplete="if (!args.validationFailed) newRoleDetailsDialog.hide()" action="#{createAppUserController.saveNewRole()}"/> <p:commandButton value="Cancel" immediate="true" onclick="newRoleDetailsDialog.hide()" /> </center> </p:panel> </p:dialog> </h:form> </h:body> 

对话框必须有自己的forms。

 <p:dialog> <h:form> ... </h:form> </p:dialog> 

因为当对话框生成到HTML输出中时,它是通过JavaScript重新定位到HTML <body>的末尾,导致它不再以任何forms坐着。 生成的HTML DOM树最终看起来像这样(使用web浏览器的开发工具来看看它):

 <body> ... <form id="createAppUserForm"> ... </form> ... <div id="newRoleDialogId" class="ui-dialog ..."> ... </div> </body> 

appendToBody="true"在这里起作用。 身体的尽头确保简单和最佳的跨浏览器兼容性显示由JavaScript模式对话框。

也可以看看:

  • 如何在p:对话框的p:dataTable中显示当前行的详细信息,并在保存后更新
  • 创build主细节表和对话框,如何重复使用相同的对话框进行创build和编辑

试试这个p:remoteCommand

http://www.primefaces.org/showcase/ui/ajax/remoteCommand.xhtml

这是我的例子

 <h:commandButton value="Aceptar" type="button" onclick="irAConf()" class="art-button"> </h:commandButton> <p:remoteCommand name="irAConf" action="#{configuracionBean.irAConfiguracion}"/> 

appendToBody =“true”在这里起作用。 该属性已从最新版本中删除。 请寻找其他的select