IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Récupérer vers la servlet le name de deux boutons submit dans un même formulaire


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut Récupérer vers la servlet le name de deux boutons submit dans un même formulaire
    Bonjour à tous,

    Je suis confrontée à un problème pour lequel les solutions trouvées sur le net ne le résolvent pas.
    Pour modifier un utilisateur: dans une jsp j'ai un formulaire (lui-même contenu dans une div qui s'affiche si l'on selectionne un utilisateur dans une liste deroulante) et contenant 2 boutons submit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <div id="modification">
    <form name="${login}" method="post" action="SAdmin" >
     
    	<table border=0>
    	<tr>
    	<td colspan="2"><h3><fmt:message key="updateDeleteUser"/></h3></td>
    	</tr>	
     
    	<tr>
    	<td><fmt:message key="login"/></td>		
    	<td><INPUT TYPE="text" NAME="newLogin" SIZE="20" MAXLENGTH="30" VALUE="${requestScope.userToManage.loginUser}"></td>
    	</tr>
     
    	<tr>
    	<td><fmt:message key="adminAccessPage" /></td>
    <!-- bouton radio checked selon droits dacces du user : -->
    <c:choose>
    <c:when test="${requestScope.userToManage.accessRight=='ADMIN'}">
    	<td><input type="radio" name="radioAdmin" value="yes" checked><fmt:message key="yes"/></td>
    	<td><input type="radio" name="radioAdmin" value="no" ><fmt:message key="no"/></td>
    </c:when>
    <c:otherwise>
    <td><input type="radio" name="radioAdmin" value="yes" ><fmt:message key="yes"/></td>
    <td><input type="radio" name="radioAdmin" value="no" checked><fmt:message key="no"/></td>
    </c:otherwise>
    </c:choose>
    	</tr>
     
    <!-- pour pouvoir faire plusieurs submit ds un mm form il faut des name differents : -->
    <!-- cest le name qui sera recuperer cote servlet -->
    	<tr>			
    	<td>
    	<input type="submit" name="updateSubmit" class="button" style="width:200px;"
    			value="<fmt:message key="adminUpdateUser"/>" /></td> 
     
    	<td>
    	<input type="submit" name="deleteSubmit"
    		class="button" style="width:200px;" 
    			value="<fmt:message key="adminDeleteUser"/>" onclick="alert('<fmt:message key="confirmDeleteUser"/>')"/>
    	</td>
    </tr>
     
    </table>
    </form>
    </div>
    Je souhaite ainsi recupérer et traiter dans ma servlet le bouton submit qui a ete cliqué. Donc son name...
    Mais :
    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !request.getParameterNames().toString().isEmpty()
    est true (donc non vide), les tentatives de recuperations suivantes sont toutes nulles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    request.getParameter("updateSubmit");
    request.getParameterValues("updateSubmit");
    request.getAttribute("updateSubmit");
    Je bloque sur ce petit truc que j'ai sur le bout de la langue mais que je ne trouve pas...
    Quelqu'un pourrait-il m'aider ?

    Merci pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour,
    Si tu veux mettre 2 submit dans le même formulaire, je te proposerai de pas passer par les boutons submit mais les boutons tout court, mais au lieu d'appeler directement la servlet, t'appelles une petite fonction javascript en lui passant un paramètre, ce paramètre décrit lequel des 2 boutons a été appelé, et dans cette fonction tu forces la valeur d'un champ hidden spécifiant l'appelant avant de soumettre ton formulaire toujours dans cette fonction. ça pourrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function callServlet(monForm,boutonClique){
    document.getElementById('tonChampHidden').value =boutonClique;
    monForm.submit();
    }
    Et côté servlet tu récupères la valeur de ce hidden transmis en Post et tu fais la suite.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    @DevServlet : merci pour ta réponse.

    J'ai ainsi fait dans ma jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <form name="manageForm" method="post" action="SAdmin" >			
    <table border=0>
    <!-- les champs a remplir...-->
     
     
    <tr>			
    	<td><input type="button" name="updateSubmit" class="button" style="width:200px;"
    			value="<fmt:message key="adminUpdateUser"/>" onclick="callServlet();" /></td> 
     
    	<td><input type="button" name="deleteSubmit"
    			class="button" style="width:200px;" value="<fmt:message key="adminDeleteUser"/>"  /></td>
     
    	<td><input type="hidden" name="hiddenField"/>	</td>
    </tr>
     
    </table>
    </form>
    le script js : (c'est mon premier javascript ! )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function callServlet(monForm,boutonClique){
     
    document.getElementsByName('hiddenField').value=boutonClique;
    manageForm.submit();
    }
    et dans ma servlet je souhaite donc récupérer le champ hidden (ai-je bien compris ?):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (request.getParameter("hiddenField")=="updateSubmit")
    	System.out.println("ça maaaaarche !");
    eh bien...ça ne fonctionne pas.

    Peux-tu m'éclairer ?
    Encore merci pour ton aide.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Normal que ça marche pas, je ne vois pas de paramètre lors de l'appel de ta js, comment veux tu en récupérer? Voila ce que j'aurais fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <tr>			
    	<td><input type="button" name="updateSubmit" class="button" style="width:200px;"
    			value="<fmt:message key="adminUpdateUser"/>" onclick="callServlet(this.form,'updateSubmit');" /></td> 
     
    	<td><input type="button" name="deleteSubmit"
    			class="button" style="width:200px;" value="<fmt:message key="adminDeleteUser"/>"  /></td>
     
    	<td><input type="hidden" id="hiddenField" name="hiddenField"/>	</td>
    </tr>

  5. #5
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Salut,

    pourtant ça marche sans soucis ce que tu essayes de faire.
    j'ai fais un petit test :

    la page JSP (qui est juste de l'HTML pour le coup d'ailleurs) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <form action="MonControleur" method="post" >
                <input type="submit" name="bouton1" value="Texte Bouton 1" />
                <br />
                <input type="submit" name="bouton2" value="Texte Bouton 2" />            
            </form>
        </body>
    </html>
    la servlet (en tout cas dans la méthode doPost, ou encore "processRequest" du générateur de NetBeans, ou encore pour que ce soit du get ou du post, directement dans la méthode "service".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException
        {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try
            {
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Servlet MonControleur</title>");            
                out.println("</head>");
                out.println("<body>");
                out.println("<h1>Servlet MonControleur at " + request.getContextPath() + "</h1>");
     
     
     
                Enumeration <String> parametres = request.getParameterNames();
                while(parametres.hasMoreElements())
                {
                    String param = parametres.nextElement();
                    out.printf("<li>%s : %s</li>" , param, request.getParameter(param));
                }
     
                out.println("</body>");
                out.println("</html>");
            } finally
            {            
                out.close();
            }
        }
    et voilà ce que j'ai à l'affichage quand je clique sur "bouton1" :

    Servlet MonControleur at /TestDoubleSubmit
    . bouton1 : Texte Bouton 1


    et quand je clique sur bouton2 :

    Servlet MonControleur at /TestDoubleSubmit
    .bouton2 : Texte Bouton 2

    donc ça marche très bien ;-)

  6. #6
    Membre chevronné Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    un petit quelquechose pour ton test de valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (request.getParameter("hiddenField")=="updateSubmit")
    plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ("updateSubmit".equals(request.getParameter("hiddenField"))
    regarde également pour la vérification des tes valeurs si tu le fais bien dans la bonne méthode doGet vs doPost.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Resalut


    @fxrobin : en faisant comme toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <form name="manageForm" method="post" action="SAdmin2" >
     
    <table border=0>
             <tr>
    	<td><fmt:message key="login"/></td>		
    	<td><INPUT TYPE="text" NAME="newLogin" SIZE="20" MAXLENGTH="30" VALUE="${requestScope.userToManage.loginUser}"></td>
    	</tr>
     
    	<tr>			
    	<td>
    	<input type="submit" name="updateSubmit" class="button" style="width:200px;"
    			value="<fmt:message key="adminUpdateUser"/>" />
    	</td>
    		<!-- et des boutons radios...-->		
    	<td>
    	<input type="submit" name="deleteSubmit" class="button"	style="width:200px;" value="<fmt:message key="adminDeleteUser"/>" />
    	</td>
    	<td>
            </tr>
     
    </table>
    </form>
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Enumeration <String> parametres = request.getParameterNames();
     
    			while(parametres.hasMoreElements())
                {
                    String param = parametres.nextElement();
                    System.out.println(request.getParameter(param));
                }
    ça me renvoie la valeur du input type="text" ! et non pas celle du bouton submit qui a été cliqué...

    @florentB : j'ai toujours null, même en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (request.getParameter("hiddenField").equals("updateSubmit")
    et mon form renvoie bien à la methode post de ma servlet.

    @DevServlet : effectivement, je suis une biroute ! Du coup j'ai bien passé mes parametres dans l'appel de cette fonction, mais ça ne fonctionne toujours pas.dans ma servlet, lorsque je souhaite recuperer mon button hidden :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println("essai avec getParameter : "+request.getAttribute("hiddenField"));
    	System.out.println("essai avec getAttribute : "+request.getParameter("hiddenField"));
    Me donnent tous deux un "null" ...

    Quelqu'un voit de la lumière ?

  8. #8
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Citation Envoyé par Bobette Voir le message
    Resalut
    ça me renvoie la valeur du input type="text" ! et non pas celle du bouton submit qui a été cliqué...
    pour être clair, ça doit afficher et le contenu de l'input type="text" et le bouton qui a été cliqué.

    Montre moi ce qui a été produit dans la console.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2013, 19h36
  2. [2.x] [Form] Deux boutons action dans le même formulaire
    Par cescu dans le forum Symfony
    Réponses: 8
    Dernier message: 25/10/2012, 15h57
  3. [PHP 5.0] Deux boutons "submit" dans un même formulaire
    Par cyrilherve dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2009, 14h08
  4. Deux submit dans un même formulaire
    Par hawaks dans le forum Langage
    Réponses: 3
    Dernier message: 21/04/2006, 15h12
  5. deux bouttons submit dans le meme formulaire
    Par nath-0-0 dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 21h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo