Appel d'une méthode à l'évenement "onClick"

Robert Duruoha · le 20/06/16 à 10:10

Bonjour à tous et à toutes,

Je suis actuellement en train de créer une modal qui selon le choix de l'utilisateur devra lancer des méthodes Java.

Bien que l'appel de ma méthode ait été mis à l'intérieur d'une fonction JS, elle est quand même lancée au chargement de la page or il faut qu'elle le soit seulement à  l'appel de la fonction JS (onClick).

 

Existe t-il un moyern de le faire ?

 

Merci de vos réponses.

Mots-clés JavaScript
#1

Bonjour, pouvez vous copier une partie de votre code pour mieux comprendre votre problématique ?

Kevin Bransard · le 21/06/16 à 11:49
4 pts
Kevin Bransard · le 21/06/16 à 11:52

JCMS abstrait l'utilisation des modales bootstrap.

Le clic est automatiquement géré sur les liens qui auraient les attributs suivants : 

<a data-jalios-action="modal" href="pathToMyModal.jsp">Ouvrir ma modale</a>

Vous pouvez aussi ouvrir une modale via votre javascript : 

$(document).on('click', 'MonLien', function(){
//Ouvrir ma modale ici (Voir documentation API modale JCMS dans la documentation JS fournie)
});
1 pt
Robert Duruoha · le 21/06/16 à 14:30

Bonjour, 

Voici du code pour mieux vous expliquer mon problème.

 

A l'intérieur de la jsp de ma modal j'ai ce code : 

<script>
function deactivate() {
   <% MyManager.getInstance().deactivateUsers(); %>
}
</script>

<jalios:buffer name="MODAL_BUTTONS">
   <button type="button" class="btn btn-default btn-cancel"       onclick="jQuery.jalios.ui.Modal.close(false);"><%= glp("ui.com.btn.close") %></button>
    <button type="button" class="btn btn-primary btn-confirm"        onclick="deactivate();JCMS.window.Modal.close(true);"><%= glp("ui.com.btn.ok") %></button>
</jalios:buffer>

Au moment du clique sur le bouton de confirmation, ma fonction JS "deactivate" est bien appelée mais l'appel de la méthode présente dans ma classe "MyManager" s'est fait dès l'affichagede la modal et non au moment du clique.

 

J'espère que c'est un peu plus clair.

 

Merci de votre aide.

 

#1

La méthode deactivateUsers sera tout le temps appellée dès que la jsp est affichée, car vous appelez une méthode java, qui n'a pas connaissance du fait d'être dans une balise javascript.

Au clic sur votre bouton, vous pourriez faire une soumission ajax de la modale qui se rafraichirait elle meme. Le bouton porterait le nom de votre action "opDeactivate" par exemple.

Vous auriez donc comme code, en haut de la jsp de votre modale :

<% 
  if (hasParameter("opDeactivate") { 
    MyManager.getInstance().deactivateUsers();
%>
  <script>JCMS.window.Modal.close(true);</script>
  <%}
%>

Et pour bouton :

<button type="button" name="opDeactivate" class="btn btn-primary btn-confirm ajax-refresh"><%= glp("ui.com.btn.ok") %>

Vous pouvez aussi passer par un fichier javascript en se branchant sur le clic, avec un traitement asynchrone qui effectuera votre action et fermera la modale au retour de cette action.

$('button').click(function() 
{
    $.ajax
    ({ 
        url: 'monTraitement',
        success: function()
        {
           JCMS.window.Modal.close(true); 
        }
    });
});
Kevin Bransard · le 21/06/16 à 14:56
#2

Plus globalement pour éviter de confondre les languages, essayez de vous contraindre à ne pas mettre de javascript dans les jsp.

Kevin Bransard · le 23/06/16 à 15:20
0 pt