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 :

implémenter un formulaire en plusieurs étapes sans utiliser de session web.


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut implémenter un formulaire en plusieurs étapes sans utiliser de session web.
    Bonjour,
    J'ai tout d'abord implémenter un formulaire en deux étapes avec utilisation de session.
    La servlet "SessionServletInfo.java" permet de récupérer les données nom et âge du premier formulaire.
    La servlet "SessionServletCoordonnees" permet de récupérer rue, code postal et ville de l'utilisateur pour lequel j'ai créé aussi une classe.
    et enfin la servlet "AffichageDonnees" pour afficher l'ensemble des données des deux requêtes du même utilisateur.
    Tout fonctionne comme prévu.
    Sauf que je n'ai aucune solution pour obtenir le même résultat sans passer par la session. je voulais utiliser :

    ServletContext context = this.getServletContext();
    User user = (User) context.getAttribute("user");
    mais là l'attribut "user" devient accessible à toutes les sessions des différents clients car c'est de portée application.

    Merci de me donner juste une piste pour trouver la solution ou un tutoriel.

    je vous remercie d'avance de votre aide .

    Avatar7575

    voilà le code que j'ai utilisé :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    package fr.epsi.javaee.servlets.exercice1;
     
    import java.io.IOException;
    import java.io.PrintWriter;
     
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import fr.epsi.javaee.beans.User;
     
    @WebServlet("/SessionServletInfo")
    public class SessionServletInfo extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
    	public SessionServletInfo() {
    		super();
    	}
     
    	protected void doPost(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
     
    		User user = new User();
    		user.setNom(request.getParameter("txt_nom"));
    		int nombre;
    		String age = request.getParameter("txt_age");
    		try {
    			nombre = Integer.valueOf(age);
    			user.setAge(nombre);
    		} catch (NumberFormatException e) {
     
    			e.printStackTrace();
    			e.getMessage();
    		}
    		request.getSession().setAttribute("user", user);
     
    		this.getServletContext().getRequestDispatcher("/coordonnees.html")
    				.forward(request, response);
    		;
    	}
    }
     
     
     
     
     
     
    @WebServlet("/SessionServletCoordonnees")
    public class SessionServletCoordonnees extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
     
        public SessionServletCoordonnees() {
            super();
     
        }
     
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    		HttpSession session = request.getSession();
    		User user = (User)session.getAttribute("user");
    		user.setRue(request.getParameter("txt_rue"));
    		user.setCodePostal(request.getParameter("txt_codePostal"));
    		user.setVille(request.getParameter("txt_ville"));
    		//on stocke l'utilisateur comme attribut de session
    		session.setAttribute("user", user);
    		this.getServletContext().getRequestDispatcher("/AffichageDonnees").forward(request, response);
     
    	}
    }
     
     
    @WebServlet("/AffichageDonnees")
    public class AffichageDonnees extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
    	public AffichageDonnees() {
    		super();
    	}
     
    	protected void doPost(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
     
     
    		response.setContentType("text/html");
    		response.setCharacterEncoding("utf-8");
    		PrintWriter out = response.getWriter();
    		User user = (User) request.getSession().getAttribute("user");
    		String nom = user.getNom();
    		int age = user.getAge();
    		String rue = user.getRue();
    		String codePostal = user.getCodePostal();
    		String ville = user.getVille();
     
    		// affichage des paramétres
    		try {
    			out.println("<h1>Recapitulatif des données du formulaire : </h1>"
    					+ "<UL>\n" + "  <LI>Nom : " + nom + "\n" + "  <LI>Age : "
    					+ age + "\n" + "<LI> Rue : " + rue + "\n"
    					+ "<LI>Code Postal :" + codePostal + "\n"
    					+ " <LI> Ville : " + ville + "</UL>\n");
    			out.println("</HTML>\n</BODY>\n");
     
    		} finally {
    			out.close();
    		}
    	}
     
    }

  2. #2
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Bonjour,

    Pourquoi n'utilises tu pas la request au lieu de la session?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    User user = (User)session.getAttribute("user");
    user.setRue(request.getParameter("txt_rue"));
    user.setCodePostal(request.getParameter("txt_codePostal"));
    user.setVille(request.getParameter("txt_ville"));
     
    //on stocke l'utilisateur comme attribut de session
    //stockage de l'user dans la request au leiu de la session
    session.setAttribute("user", user);
     
    request.setAttribute("user",user)
    Peut être pourrais tu aussi expliquer les objectifs de ton problème, le scénario parce que là je ne vois pas trop l’intérêt de 2 servlets.
    1) Tu as une première action qui te permet de saisir le nom et l'âge d'une personne.
    2) Ensuite tu forward vers un deuxième formulaire qui te permet de saisir rue, code postal et ville
    3) Pour finir tu forward vers une page qui t'affiche le tout.

    Si c'est bien ça tu peux passer par la request par contre la persistance des infos sera limitée à la simple durée de vie de la requete HTTP. (chose qui peut être embêtante lorsqu'on parle de 'user'...)
    PS: pourquoi deux classe pour récupérer les infos ?

    Bon courage et tiens nous au courant,
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci pour votre réponse. je me suis mal expliqué lors du premier message. vous trouverez ci-dessous le sujet proposé par l'enseignant.

    voilà le sujet du professeur :
    A /Objectif
    Réaliser une application qui permet à un utilisateur de s'inscrire en donnant des informations personnelles.
    La saisie d'information doit se faire en plusieurs étapes :

    .Une première page Web demande à l'utilisateur de saisir son nom et son âge. Puis l'utilisateur clique sur le bouton "suivant".
    .ne nouvelle page demande à l'utilisateur de saisir son adresse (rue, code postal et ville). Puis l'utilisateur clique sur le bouton "valider".
    .Finalemnt une page récapitulative s'affiche avec toutes les informations de l'utilisateur.
    Pour réaliser cette inscription en plusieurs étapes, vous utiliserez le mécanisme de session Web pour conserver les données saisies par l'utilisateur.
    B/ Reprenez l'exercice précédent mais cette fois-ci, implémentez le même formulaire de saisie en plusieurs étapes sans utiliser la session Web. L'objectif est donc d'implémenter une application sans état.


    Pour le première solution (A) c'est ce que j'ai fait dans le code précédent.
    Mais pour la deuxième solution (B) , j'avoue que je n'en ai aucune idée.

    Pourriez SVP me guider vers une piste.
    Merci d'avance de votre aide.

    Avatar7575

  4. #4
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Ok c'est bien ce que j'avais compris. Il faut que tu utilises seulement l'objet request
    1) Tu récupères les données de la première page, tu les settes à la request (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttributes("user", user)
    )
    2) tu mets en hidden tes données dans le formulaire la deuxième page
    3) dans la 3ème page tu pourras afficher toutes les données

    Les concepts à aborder sont le passage de paramètres en hidden, les jsp:usebean ou autre tagLib...
    Tuto d'aide

    Voilà tu dois pouvoir y arriver

    Bon courage
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Merci beaucoup pour la réponse. Hidden m'a posé pas mal de problème mais j'ai fini par trouver la solution.
    voici le code que j'ai effectué et qui fonctionne bien :
    j'ai créé la classe ServletInfo et la classe ServletCoordonnees et deux fichiers jsp : coordonneesExercice2.jsp et affichageExercice2.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
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    @WebServlet("/ServletInfo")
    public class ServletInfo extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    		User user = new User();
    		user.setNom(request.getParameter("txt_nom"));
    		String age = request.getParameter("txt_age");
    		int nombre;
     
    		try {
    			nombre = Integer.valueOf(age);
    			user.setAge(nombre);
    		} catch (NumberFormatException e) {
     
    			e.printStackTrace();
    			e.getMessage();
    		}
     
    		request.setAttribute("user", user);
     
    		this.getServletContext().getRequestDispatcher("/coordonneesExercice2.jsp")
    				.forward(request, response);
     
    	}
    }
     
     
    @WebServlet("/ServletCoordonnees")
    public class ServletCoordonnees extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
    	protected void doPost(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
     
    		User user = new User();
    		String age = request.getParameter("age");
    		int nombre;
    		try{
    			nombre = Integer.valueOf(age);
    			user.setAge(nombre);
    		}catch(NumberFormatException e){
    			e.printStackTrace();
    		}
     
    		String nom = request.getParameter("nom");
    		String rue = request.getParameter("txt_rue");
    		String codePostal = request.getParameter("txt_codePostal");
    		String ville = request.getParameter("txt_ville");
     
    		user.setNom(nom);
    		user.setRue(rue);
    		user.setCodePostal(codePostal);
    		user.setVille(ville);
     
    		// on stocke l'utilisateur comme attribut de requete
    		request.setAttribute("user", user);
    		this.getServletContext().getRequestDispatcher("/affichageExercice2.jsp")
    				.forward(request, response);
     
    	}
    }
    voici le code du fichiers : coordonneesExercice2.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
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    <%@page import="fr.epsi.javaee.beans.User"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
     
    	<p>
     
    		<%
                            User user = (User) request.getAttribute("user");
                    %>
    		<%
                            String age = String.valueOf(user.getAge());
                    %>
     
    		<%
                            String nom = user.getNom();
                    %>
     
    		<jsp:setProperty name="user" property="age" param="age" />
    		<jsp:setProperty name="user" property="nom" param="nom" />
    		<jsp:setProperty name="user" property="rue" param="txt_rue" />
    		<jsp:setProperty name="user" property="codePostal"
    			param="txt_codePostal" />
    		<jsp:setProperty name="user" property="ville" param="txt_ville" />
    	</p>
     
    	<form action="ServletCoordonnees" method="post">
     
    		<p>
    			<input type="hidden" id="nom" name="nom" value="<%=nom%>" />
    		</p>
    		<p>
    			<input type="hidden" id="age" name="age" value="<%=age%>" />
    		</p>
     
    		<p>
    			<label id="lbl_rue">Rue : </label><input type="text" id="txt_rue"
    				name="txt_rue" />
     
    		</p>
    		<p>
    			<label id="lbl_codePostal">Code Postal : </label><input type="text"
    				id="txt_codePostal" name="txt_codePostal" />
     
    		</p>
    		<p>
    			<label id="lbl_ville">Ville : </label><input type="text"
    				id="txt_ville" name="txt_ville" />
    		</p>
    		<p>
    			<input type="submit" value="valider" id="btn_valider" />
    		</p>
    	</form>
     
    </body>
    </html>
    voici le code du fichier : affichageExercice2.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@page import="fr.epsi.javaee.beans.User"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<p>
    		Nom :
    		<c:out value="${user.nom}" />
    	</p>
    	<p>
    		Age :
    		<c:out value="${user.age }" />
    	</p>
    	<p>
    		Rue :
    		<c:out value="${user.rue }" />
    	</p>
    	<p>
    		code Postal :
    		<c:out value="${user.codePostal }" />
    	</p>
    	<p>
    		Ville :
    		<c:out value="${user.ville }" />
    	</p>
     
    </body>
    </html>

    Enfin j'espère que ce code sera utile pour d'autres internautes débutants comme moi.
    Et je vous remercie encore une fois pour votre aide.

    Cordialement

    Avatar7575

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Formulaire en plusieurs étapes
    Par bihman dans le forum Symfony
    Réponses: 6
    Dernier message: 04/10/2010, 12h20
  2. [1.x] Formulaire en plusieurs étapes
    Par belgacem.tlili dans le forum Symfony
    Réponses: 4
    Dernier message: 29/03/2010, 16h37
  3. [XL-2003] Sélectionner plusieurs cellules sans utiliser Range
    Par rafalemirage dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 21/04/2009, 18h11
  4. [MySQL] Un petit exemple de formulaire en plusieurs étapes
    Par guismoman33 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/03/2008, 18h57
  5. [CR8.5]lancer plusieurs impressions sans utiliser l'ocx
    Par sboober dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 04/05/2005, 11h08

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