Comment puis-je exécuter Javascript avant un fichier JSF < h: commandLink > l'action est effectuée? [dupliquer]

StackOverflow https://stackoverflow.com/questions/73628

  •  09-06-2019
  •  | 
  •  

Question

    

Cette question a déjà une réponse ici:

    
            
  •              Confirmation lors de l'envoi                                      1 réponse                          
  •     
    

Si vous avez un JSF & h;; commandLink > (qui utilise l'événement onclick d'un < a > pour envoyer le forme actuelle), comment exécutez-vous JavaScript (par exemple, en demandant une confirmation de suppression) avant l'exécution de l'action?

Était-ce utile?

La solution 2

<h:commandLink id="myCommandLink" action="#{myPageCode.doDelete}">
    <h:outputText value="#{msgs.deleteText}" />
</h:commandLink>
<script type="text/javascript">
if (document.getElementById) {
    var commandLink = document.getElementById('<c:out value="${myPageCode.myCommandLinkClientId}" />');
    if (commandLink && commandLink.onclick) {
        var commandLinkOnclick = commandLink.onclick;
        commandLink.onclick = function() {
            var result = confirm('Do you really want to <c:out value="${msgs.deleteText}" />?');
            if (result) {
                return commandLinkOnclick();
            }
            return false;
        }
    }
}
</script>

D'autres actions Javascript (comme la validation de la saisie de formulaire, etc.) peuvent être effectuées en remplaçant l'appel à confirm () par un appel à une autre fonction.

Autres conseils

Peut être simplifié comme ceci

onclick="return confirm('Are you sure?');"

Cela a fonctionné pour moi:

<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"  
                                             id="newibutton" 
                                             onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;" 
                                             value="#{bundle.NewPatient}"/>

Vous pouvez toujours utiliser onclick. Le rendu de kit de JSF spécification (voir Comportement de l'encodage) décrit comment le lien doit le gérer. Voici la partie importante (ce qu’elle rend pour onclick):

var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();

Ainsi, votre fonction ne sera pas transmise à l'objet événement (ce qui n'est de toute façon pas fiable entre navigateurs), mais renvoyer true / false court-circuitera la soumission.

Dans JSF 1.2, vous pouvez spécifier des événements onclick.

De même, d'autres bibliothèques telles que MyFaces ou IceFaces implémente le " onclick " gestionnaire.

Ce que vous devez faire alors est simplement:

<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />

Remarque: vous ne pouvez pas simplement renvoyer confirmation (...) , car cela bloquera le reste du code JavaScript dans l'événement onClick, ce qui empêcherait votre action de se produire. Peu importe ce que l'utilisateur a retourné!

Si vous souhaitez exécuter quelque chose avant que le formulaire ne soit posté, pour confirmation par exemple, essayez l'événement de formulaire onSubmit. Quelque chose comme:

myform.onsubmit = function(){confirm("really really sure?")};

Cela n'a jamais fonctionné pour moi,

 onclick="if(confirm('Are you sure?')) return false;" />

mais cela a

onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
var deleteClick;
var mess="xxx";
function assignDeleteClick(link) {
    if (link.onclick == confirmDelete) {
        return;
    }
    deleteClick = link.onclick;
    link.onclick = confirmDelete;
}


function confirmDelete() {
    var ans = confirm(mess);
    if (ans == true) {
        return deleteClick();
    } else {
        return false;
    }
} 

utilisez ce code pour jsf 1.1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top