Bonjour à toi,
Peux-tu nous montrer ton code JSF, en particulier celui de ton commandLink ?
Concernant la définition du onclick, je ne suis pas d'accord.
En effet, lorsque le composant commandLink va être "rendu" en HTML, le onclick va être défini, pour faire en sorte d'appeler la méthode du bean définie dans l'attribut action (ou actionListener). Cependant, si tu définis toi même quelque chose dans le onclick, celui-ci sera placé avant le code ajouté par JSF.
Par exemple, le code JSF suivant :
1 2 3 4
| <h:form id="myForm">
<h:commandLink id="btn1" value="Test un" action="#{monBean.maMethode}"/>
<h:commandLink id="btn2" value="Test deux" action="#{monBean.maMethode}" onclick="alert('coucou');"/>
</h:form> |
créera le code HTML suivant :
1 2 3 4 5
| <form id="myForm" ...>
...
<a id="myForm:btn1" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.forms['myForm'],'myForm:btn1,myForm:btn1','');}return false">Test un</a>
<a id="myForm:btn2" href="#" onclick="var a=function(){alert('coucou');};var b=function(){if(typeof jsfcljs == 'function'){jsfcljs(document.forms['myForm'],'myForm:btn2,myForm:btn2','');}return false};return (a()==false) ? false : b();">Test deux</a>
</form> |
Bon, le code est un peu barbare, mais on voit que myForm:btn1 a un code Javascript bien précis sur le onclick. Je l'ai surligné en bleu.
Ce code est également présent sur le deuxième bouton, mais le code que j'ai moi même défini dans le onclick (à savoir le code en rouge), est présent aussi, et exécuté avant !
Il n'y a donc aucun problème à utiliser onclick et action...
Cela permet par exemple de se servir d'un commandButton ou commandLink pour faire exécuter un code JS sans soumettre le formulaire, en retournant false à la fin de son code JS, par exemple :
<h:commandLink ... onclick="alert('j execute un truc en JS ici'); return false;"/>
Donc le problème vient d'ailleurs pour ton code !
A ce propos, pourquoi tu fais window.opener.close() alors que tu dis vouloir fermer la fenêtre courante ?
Partager