<p: commandbutton> действие не работает внутри <p: dialog>
У меня есть диалог 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>
Ответы
Ответ 1
Диалог должен иметь свою собственную форму.
<p:dialog>
<h:form>
...
</h:form>
</p:dialog>
Потому что, когда диалог сгенерирован в HTML-вывод, он с помощью JavaScript переместился в конец HTML <body>
, что заставляет его больше не сидеть в какой-либо форме. Сгенерированное дерево HTML DOM заканчивается так, чтобы выглядеть (используйте инструменты веб-браузера для его просмотра):
<body>
...
<form id="createAppUserForm">
...
</form>
...
<div id="newRoleDialogId" class="ui-dialog ...">
...
</div>
</body>
Здесь играет роль appendToBody="true"
. Конец тела обеспечивает легкую и лучшую кросс-браузерную совместимость отображения модального диалога с помощью JavaScript.
См. также:
Ответ 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}"/>
Ответ 3
Здесь присутствует роль appendToBody = "true". Этот атрибут был удален из последней версии. Пожалуйста, найдите другую альтернативу