p: l'action du bouton de commande ne fonctionne pas à l'intérieur de P: dialog

j'ai un dialogue p:et il y a un panneau à l'intérieur. Le problème est que la méthode D'Action du bouton "Save" ne fonctionne pas. Il n'a même pas les appels de la méthode. Je peux atteindre la méthode def. avec ctrl+lm il n'y a donc aucun problème avec le nom de la méthode.

<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>
6
demandé sur Kukeltje 2013-09-23 16:01:03

3 réponses

le dialogue, lorsqu'il est utilisé avec un appendToBody/appendTo="@Body" doit avoir sa propre forme.

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

parce que, lorsque la boîte de dialogue est générée en sortie HTML, C'est par JavaScript relocalisé à la fin de HTML <body> qui fait qu'il n'est plus assis sous aucune forme. L'arbre de DOM HTML généré finit par ressembler à ceci (utilisez les outils dev de webbrowser pour le voir):

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

le appendToBody="true" joue un rôle dans ici. La fin de corps assure la compatibilité facile et meilleure de navigateur croisée de l'affichage d'un Dialogue modal par JavaScript.

il en va de même pour un p:overlayPanel avec un appendTo...

mais assurez-vous également qu'il n'y a pas de h:form imbriqué avant de" déplacer " le p:dialog . Ainsi prévenir

<h:form>
   ...

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

   ...
</h:form>

car bien qu'il se termine comme

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

il est d'abord non valide html

voir aussi:

11
répondu BalusC 2018-05-01 10:37:29

essayez cette p:remoteCommand

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

c'est mon exemple

<h:commandButton value="Aceptar" type="button" onclick="irAConf()" class="art-button">
</h:commandButton>

<p:remoteCommand name="irAConf"
action="#{configuracionBean.irAConfiguracion}"/>                
2
répondu DarwinFernandez 2015-06-01 13:53:42

La appendToBody="true" joue un rôle ici. Cet attribut a été supprimé de la dernière version. S'il vous plaît chercher une autre alternative

0
répondu AshutoshDeora 2015-07-14 06:56:02