Voir directement à partir de ce post.
Version imprimable
Voir directement à partir de ce post.
<%Code:
1
2
3
4
5
6
7
8 <% // Récupération du message d'erreur String erreur = (String) request.getAttribute("message"); // Affichage du message s'il existe if (erreur != null) { %> <strong>Erreur : </strong> <% } %>
Non, ça ne fonctionne toujours pas :(
Tu es sur de passer dans le doPost() et pas dans le doGet()??
Je suis tenté de dire oui, mais étant débutant je garde une réserve :)
J'ai fait quelques changements, voici le code :
creerClient.jsp :
A laquelle on accède par la servlet createUser :Code:
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 <%@ page pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Création d'un client</title> <link type="text/css" rel="stylesheet" href="inc/style.css"/> </head> <body> <div> <form method="post" action="/suplink/showUser"> <fieldset> <legend>Register</legend> <label for="emailUser">Email <span class="requis">*</span></label> <input type="email" id="emailUser" name="emailUser" value="" size="20" maxlength="20" /> <br /> <label for="passwordUser">Mot de Passe </label> <input type="password" id="passwordUser" name="passwordUser" value="" size="20" maxlength="20" /> <br /> </fieldset> <input type="submit" value="Valider" /> <input type="reset" value="Remettre à zéro" /> <br/> </form> </div> </body> </html>
L'envoi du formulaire (donc en doPost() ) mène à showUser.jsp :Code:
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
47
48
49
50
51
52
53 package com.suplink.servlets; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.suplink.beans.User; public class CreateUser extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; @Override public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String email = request.getParameter("emailUser"); String password = request.getParameter("password"); String message; if ( email.trim().isEmpty() || password.trim().isEmpty() ) { message = "Erreur - Vous n'avez pas rempli tous les champs obligatoires. <br> <a href=\"creerClient.jsp\">Cliquez ici</a> pour accéder au formulaire de création d'un client."; } else { message = "Utilisateur créé avec succès !"; } User user = new User(); user.setEmail(email); request.setAttribute( "user", user ); request.setAttribute( "message", message ); this.getServletContext().getRequestDispatcher("/showUser" ).forward( request, response ); } @Override public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.getServletContext().getRequestDispatcher("/creerClient.jsp" ).forward( request, response ); } }
A laquelle on accède par la servlet showUser :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <%@ page pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Affichage d'un client</title> <link type="text/css" rel="stylesheet" href="inc/style.css" /> </head> <body> <p>${erreur}</p> <p>Email : ${ param.emailUser } </p> </body> </html>
Voilà, j'ai un peu l'impression de m'embrouiller mais j'ai rien trouvé de mieux. Et comme ça ça ne fonctionne toujours pas.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package com.suplink.servlets; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ShowUser extends HttpServlet { @Override protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String erreur = (String) request.getAttribute("message"); request.setAttribute( "erreur", erreur ); this.getServletContext().getRequestDispatcher("/showUser.jsp" ).forward( request, response ); } }
Personne pour me dire pourquoi je n'arrive pas à récupérer l'attribut ?
en POST tu envoie vers la servelt showUser, qui crée l'attribut message qui redirige vers shwUserp.jsp mais cette dernière n'utilse nulle part l'attribut message.
Seul createUser.jsp utilise message, mais ce dernier est accédé en GET par la servlet CreateUser qui lui ne fait rien dans le GET et n'est jamais accédée en POST.
Non, c'est la servlet CreateUser qui crée l'attribut message, et l'envoie à showUser en POST. Ensuite showUser le recupère et le met dans l'objet erreur, qui est envoyé comme attribut vers showUser.jsp, qui essaie de l'afficher.
Et justement, je me demande bien pourquoi ça ne l'affiche pas, ou si c'est moi qui ne comprends rien :p
Heu non,
Les attributs sont réinitialisé entre chaque requete.
Donc tans ton doPost, message n'existe pas. De même à la requete précédente, tu crée message mais au contraire tu ne l'utilise pas dans la jsp.
Ok, je voyais pas ça comme ça, c'est bien moi qui comprends rien :)
Et du coup faudrait que je fasse comment là ? Je bloque un peu, désolé :(
pour passer des informations non critiques d'un formulaire à un autre, le plus simple est de les mettre dans des input hidden.
Pour conserver un état dans ton application, il faut utiliser la session