我有一个p:对话框,里面有一个面板。问题是“保存”按钮的操作方法不起作用。它甚至不调用该方法。我可以达到方法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>
答案 0 :(得分:13)
当与appendToBody/appendTo="@Body"
一起使用时,该对话框必须具有自己的表单。
<p:dialog>
<h:form>
...
</h:form>
</p:dialog>
因为,当对话框生成HTML输出时,它被JavaScript重新定位到HTML <body>
的末尾,导致它不再以任何形式出现。生成的HTML DOM树最终看起来像这样(使用webbrowser的开发工具来查看它):
<body>
...
<form id="createAppUserForm">
...
</form>
...
<div id="newRoleDialogId" class="ui-dialog ...">
...
</div>
</body>
appendToBody="true"
在这里发挥作用。身体的末端确保了通过JavaScript显示模态对话框的简单和最佳的跨浏览器兼容性。
具有p:overlayPanel
appendTo...
的方式也是如此
但是也要确保在“移动”p:dialog
之前,没有嵌套的h:form
。所以阻止
<h:form>
...
<p:dialog>
<h:form>
...
</h:form>
</p:dialog>
...
</h:form>
因为它最终会像
一样 <body>
...
<form id="createAppUserForm">
...
</form>
...
<div id="newRoleDialogId" class="ui-dialog ...">
<form>
...
</form>
</div>
</body>
它最初是无效的html
答案 1 :(得分:2)
试试这个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}"/>
答案 2 :(得分:0)
appendToBody =“true”在这里发挥作用。此属性已从最新版本中删除。请寻找其他替代方案
答案 3 :(得分:0)
将(process =“ @ this”)添加到commandButton对我有用。