jsf - validar - <p: botón de comando> la acción no funciona dentro de<p: diálogo>
primefaces commandlink update (3)
Tengo ap: diálogo y hay un panel dentro de él. El problema es que el método de acción del botón "Guardar" no funciona. Ni siquiera llama al método. Puedo alcanzar el método def. con ctrl + lm, por lo que no hay problema con el nombre del método.
<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>
prueba esto p: remoteCommand
http://www.primefaces.org/showcase/ui/ajax/remoteCommand.xhtml
este es mi ejemplo
<h:commandButton value="Aceptar" type="button" onclick="irAConf()" class="art-button">
</h:commandButton>
<p:remoteCommand name="irAConf"
action="#{configuracionBean.irAConfiguracion}"/>
El appendToBody = "true" juega un papel aquí. Este atributo se ha eliminado de la última versión. Por favor busca otra alternativa
El diálogo debe tener su propia forma.
<p:dialog>
<h:form>
...
</h:form>
</p:dialog>
Porque, cuando el diálogo se genera en salida de HTML, es por medio de JavaScript reubicado al final del HTML <body>
que hace que ya no esté sentado de ninguna forma. El árbol de DOM HTML generado termina pareciéndose a esto (use las herramientas de desarrollo de webbrowser para verlo):
<body>
...
<form id="createAppUserForm">
...
</form>
...
<div id="newRoleDialogId" class="ui-dialog ...">
...
</div>
</body>
El appendToBody="true"
juega un papel aquí. El final del cuerpo garantiza una compatibilidad fácil y mejor entre navegadores para mostrar un diálogo modal mediante JavaScript.