J'ai une page JSP qui contient 3 boutons et je veux que chaque bouton appelle une servlet.Comment je peux faire ça?
Merci
J'ai une page JSP qui contient 3 boutons et je veux que chaque bouton appelle une servlet.Comment je peux faire ça?
Merci
Bjr,
C'est très simple, tu declares dans ton web.xml 3 patterns mappant sur les 3 servlets auxquels tu veux faire appels, et dans les actions "onclick" de tes boutons tu appels une fonction à laquelle tu passes le nom de ton bouton en cours, et dans cette fonction tu mets ce code:
c'est une idée fonctionnelle que tu dois adapter à ton besoin, apres si tu veux plus details tu poses d'autres questions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function sendForm(nom_button) en fonction du nom du button document.monform.action="ton_pattern_web_xml"; document.monform.submit();
Chaque bouton doit être associé à une servlet différente ?
si c'est ce que tu veux, tu as 2 possibilité aller même 3 :p
la première 3 boutons => 3 formulaires => 3 actions une vers chaque servlet
deuxième solution :
un formulaire
et tu passes par du javascript
et sur tes boutons le onclick="mesActions("1")";
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 function mesActions(bouton) { if(bouton=="1") { document.Nom_Du_Form.action="mapping servlet1+ paramètre"; document.Nom_Du_Form.submit(); } else if(bouton=="2") { document.Nom_Du_Form.action="mapping servlet2+ paramètre"; document.Nom_Du_Form.submit(); } else { document.Nom_Du_Form.action="mapping servlet3+ paramètre"; document.Nom_Du_Form.submit(); } }
la troisième solution 1 fonction javascript et une seul servlet sur le même principe sauf que tu passeras un paramètre qui dira quel traitement appliquer en fonction du bouton
Ta servlet a-t-elle besoin de paramètre que tu récupères par la request pour faire son traitement ?
si oui tu peux avoir monParam=coucou
Dans le cas contraire le mapping associé à ta servlet défini dans ton web.xml suffit
Bon désolée mais j'ai pas encore bien saisi.J'ai encore le meme problème.je ne comprends pas bien la notion de formulaire.Le problème que je veux que chaque bouton de ma page JSP me mène vers une servlet et chacune de ces servlet a besoin de tous les champs texte de ma JSP donc je crois que je dois avoir des formulaires dont le nombre est égal au nombre de servlet.n'est ce pas?Comment et où je dois écrire les balises de mes formulaires pour que chaque servlet peut voir tous les champs de JSP?
J'espère que vous pouvez m'aider.Merci
J'ai encore le meme problème et je me bloque.y a quelqu'un qui peut m'aider?
Merci.
bonjour,
je vois bien une solution javascript qui fonctionnerait, m'enfin si je me trompe pas dans la syntaxe...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <form method="post" action="/servlet1"> <input type="text" name="test1"/> <input type="button" name="btn1" value="servlet2" onclick="this.form.action='/servlet2';this.form.submit();"/> <input type="button" name="btn2" value="servlet3" onclick="this.form.action='/servlet3';this.form.submit();"/> <input type="submit" name="btn3" value="defaut" /> </form>
Pas mal l'idée de changer l'action du formulaire sur le onclick plutôt que de déclarer de nouvelle fonction.
la syntaxe à l'air d'être bonne
J'ai essayé avec la solution proposée mais ça marche pas, je ne comprends pas pourquoi.Voilà mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <body> <form name="MyForm" action="http://localhost:8080/stage/Envoi" method="post"> <label> <input name="envoyer" type="submit" id="envoyer" value="Envoyer"/> </label> <label> <input name="ajoutDest" type="button" id="ajoutDest" value="Ajouter destinataire" onclick="this.MyForm.action='http://localhost:8080/stage/Destinataire';this.MyForm.submit();"/> </label> <label> <input name="consulter" type="button" id="consulter" value="Consulter groupe" onclick="this.MyForm.action='http://localhost:8080/stage/Groupe';this.MyForm.submit();"/> </label> </form> </body>
fais un mapping dans ton web.xml pour éviter ceci:
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part http://localhost:8080/stage/Envoi
En plus moi je préfère une seul servlet dans le action de ton formulaire et qui dispatch suivant le bouton cliqué .
il ne faut pas mettre l'url absolue dans l'attribut action du formulaire, effectivement le mapping n'est pas connue dans l'application.
oui, moi aussi, sauf qu'il faut faire un contrôleur, et que ce n'est pas la question initiale....Envoyé par jiddou
Normalement en remplaçant
action="http://localhost:8080/stage/Envoi"
par action="/stage/Envoi"
même chose pour les 2 autres boutons
voir remplacer stage parcomme ça si tu décides de changer ton contexte applicatif tu n'auras pas à le modifier dans toutes tes jsp et servlet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part request.getContextPath()
Autre solution que je trouve un peu plus propre :
- Un seul formulaire, avec une servlet dans "action".
- Un champ hidden
- 3 boutons submit
- Un appel javascript sur le onclick de chaque bouton mettant à jour le champ hidden (document.getElementById('monChampHidden').value = 'lActionCliquee')
- Une servlet (sus-citée) qui récupère la valeur du champ caché et forwarde sur la bonne servlet (ou la bonne méthode, pas forcément utile de faire 3 servlets, après ça dépend de tes besoins)
C'est un poil plus lourd à écrire mais ça me semble plus propre, plus classique aussi, après, chacun ses goûts. Personnellement j'ai déjà éprouvé la méthode de changer l'action du form, c'est tout-à-fait envisageable bien que je ne sois pas fan. En revanche je déconseille la reconstruction d'URL en javascript, c'est franchement casse-gueule.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager