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 :

Problème de validation d'une case à cocher nécessaire pour l'authentification et respect du modèle MVC.


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 Problème de validation d'une case à cocher nécessaire pour l'authentification et respect du modèle MVC.
    Bonjour,

    J'ai un petit problème.
    Voilà le sujet :
    Développer une application MVC pour la saisie d'un formulaire d'adhésion en ligne. Le formulaire doit permettre de saisir les informations suivantes : login et email. De plus, l'utilisateur doit pouvoir cocher la case "J'ai lu et approuvé les conditions générales de ce site".
    Au moment de la soumission du formulaire, le serveur doit vérifier que tous les champs ont été correctement renseignés : le login et l'email doivent être renseignés et la case doit être cochée. Si des champs n'ont pas été saisis correctement, le formulaire doit être réaffiché avec un message d'erreur indiquant clairement ce qui n'est pas correct. De plus, les champs doivent être remplis avec les valeurs saisies précédemment pour faciliter la correction.

    Lorsque tous les champs sont saisis correctement, une page de confirmation d'adhésion doit être affichée avec la mention :

    Bienvenue <login>, votre inscription a bien été prise en compte le <date> à <heure>.
    Pour réaliser cette application, vous utiliserez une architecture MVC en utilisant notamment des JSP pour réaliser les vues.

    On n'a pas le droit d'utiliser un framework quelconque.

    Mon soucis est que je ne sais pas où placer la gestion de la validation des erreurs liées à la case à cocher "acceptation des conditions générales du site".

    J'ai pensé à ajouter un champ supplémentaire à la classe UserV3 (voir code). quel est votre avis et est-ce que mon application respecte le modèle MVC.


    voici mon code

    classe UserV3 :
    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
     
     
     
    public class UserV3 {
     
    	private String login;
     
    	private String email;
     
    	private Date dateCreation;
     
    	//private String aAccepteCondition;  
     
    	/*
    	 * public String getDateCreationBis() { DateFormat mediumDateFormat =
    	 * DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.MEDIUM);
    	 * 
    	 * return mediumDateFormat.format(this.dateCreation); }
    	 */
     
    	public Date getDateCreation() {
     
    		return this.dateCreation;
    	}
     
    	public void setDateCreation(Date dateCreation) {
    		this.dateCreation = dateCreation;
    	}
     
    	public String getLogin() {
    		return login;
    	}
     
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
    	public String getEmail() {
    		return email;
    	}
     
    	public void setEmail(String email) {
    		this.email = email;
    	}
     
    }
    Voici la classe Servlet Inscription3 :
    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
     
     
     
    @WebServlet("/Inscription3")
    public class Inscription3 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
     
        public Inscription3() {
            super();
     
        }
     
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    	}
     
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
     
     
    		ValidationDonnees validation = new ValidationDonnees();
    		Map<String, String> erreurs = new HashMap<String, String>();
     
    		String login = request.getParameter("login");
    		String email = request.getParameter("email");
    		String caseCocher = request.getParameter("caseCocher");
     
     
    		UserV3 user = new UserV3();
     
    		user.setLogin(login);
    		user.setEmail(email);
    		user.setDateCreation(new Date());
     
    		try {
     
    			validation.validationLogin(user);
     
    		} catch (ChampInvalide e) {
     
    			erreurs.put("login", e.getMessage());
    		}
     
    		try {
     
    			validation.validationEmail(user);
     
    		} catch (ChampInvalide e) {
     
    			erreurs.put("email", e.getMessage());
     
    		}
     
    		request.setAttribute("user", user);
    		request.setAttribute("erreurs", erreurs);
    		request.setAttribute("caseCocher", caseCocher);
     
    		request.getSession().setAttribute("user", user);
    		request.getSession().setAttribute("erreurs", erreurs);
    		request.getSession().setAttribute("caseCocher", caseCocher);
     
    		if (erreurs.isEmpty()) {
     
    			this.getServletContext()
    					.getRequestDispatcher("/confirmationInscriptionVersion3.jsp")
    					.forward(request, response);
     
    		} else {
     
    			this.getServletContext().getRequestDispatcher("/loginExo3Version3.jsp")
    					.forward(request, response);
     
    		}
     
    	}
     
    }
    Voici la classe ValidationDonnees
    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
     
     
    public class ValidationDonnees {
     
    public void validationLogin(UserV3 u) throws ChampInvalide {
     
    		if(u.getLogin() == null || u.getLogin().length() == 0 || u.getLogin().length() < 4){
     
    			throw new ChampInvalide(
    					"le champ login doit contenir au moins 4 caractères ! ");
     
    		}
     
    	}
     
    	public void validationEmail(UserV3 u) throws ChampInvalide {
     
    		if (u.getEmail() == null || u.getEmail().length() == 0) {
     
    			throw new ChampInvalide("le champ email ne doit pas être vide ! ");
     
    		} else if (!Pattern
    				.matches(
    						"^[_a-z0-9-]+(\\.|\\+[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)+$",
    						u.getEmail())) {
     
    			throw new ChampInvalide(
    					"veuillez saisir une adresse email valide ! ");
    		}
    	}
     
     
    	public void validationCaseACocher(UserV3 u) {
     
    	}
    }
    voici la jsp (loginExo3Version3.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
     
    <%@page import="javax.enterprise.context.SessionScoped"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
     
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="ISO-8859-1">
    <title>Insert title here</title>
    <link type="text/css" rel="stylesheet" href="style.css" />
    </head>
    <body>
    	<form action="Inscription3" method="post">
     
    		<!-- généralement on ne garde en session que le login et email de l'utilisateur mais pas la valeur de la case à cocher ??? -->
    			<p>
    				<label for="login">Votre login : </label> <input id=login
    					name="login" type="text"
    					value="<c:out value="${sessionScope.user.login}"/>"> <span
    					class="msgErreurs">${sessionScope.erreurs['login']}</span>
    			</p>
    			<p>
    				<label for="email">Votre email : </label> <input id=email
    					name="email" type="email"
    					value="<c:out value="${sessionScope.user.email}"/>" /> <span
    					class="msgErreurs">${sessionScope.erreurs['email']}</span>
    			</p>
    			<p>
    				<input type="radio" name="caseCocher" id="caseCocher"
    					value="<c:out value="${sessionScope.caseCocher}"/>" /> <label
    					for="case">J'ai lu et approuvé les conditions générales de
    					ce site </label> <span class="msgErreurs">${sessionScope.erreurs["caseCocher"]}</span>
    			</p>
    			<p>
    				<input type="submit" value="valider" name="valider" id="btn_valider">
    			</p>
    	</form>
    </body>
    </html>
    Voici la jsp (confirmationInscriptionVersion3.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
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
     
     
    <%@page import="fr.epsi.javaee.model.exercice3.UserV3"%>
     
    <!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><jsp:useBean id="now" scope="page" class="java.util.Date" /></p>
     
    	<p>
     
    		<%
                            if (request.getSession().getAttribute("user") == null) {
                                    out.print("Vous n'êtes pas connecté. Cliquez <a href=\"loginExo3Version3.jsp\">ici</a> pour vous authentifier");
     
                            } 
                    %>
    		Bienvenue
    		<c:out value="${sessionScope.user.login}" />
    		, votre inscription a bien été prise en compte le
     
    		<fmt:formatDate value="${sessionScope.user.dateCreation}"
    			dateStyle="long" />
    		à
    		<fmt:formatDate value="${sessionScope.user.dateCreation}" type="time" />
     
     
    	</p>
    </body>
    </html>
    J'ai besoin de votre suggestion à propos de la façon dont j'ai traité le sujet. et puis où mettre le fonction qui traite la validation de la case à cocher. Faut il ajouter un champ à la classe UserV3 et si oui ce champ sera de quel type car pour moi traiter un String c'est facile mais il doit être un booléen (je ne sais pas comment gérer la fonction de validation.
    Aussi pour la servlet : j'ai d'abord créer un objet UserV3 et puis j'ai fait appel aux fonctions validationLogin et validationEmail. est ce que c'est comme ça qu'il faut faire. car je pense à quoi ça sert de créer l'objet user avant de tester la validation des données. dans ce cas je ne sais pas où traiter la validation des données (dans une classe à part comme j'ai fait ou dans la classe UserV3. car dans ce dernier cas j'aurais du mal à placer la validation de la case à cocher sauf s'il fait partie de la classe user. bref ça devient confus dans ma tête


    Voici la code de la fonction de validation que j'ai imaginé (cas où il n'est pas lié à la classe UserV3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void validationRadio(String caseCocher) throws ChampInvalide {
     
    		if (caseCocher == null) {
     
    			throw new ChampInvalide("la case doit être cochée ! ");
     
    		}
    	}
    Merci d'avance pour votre aide. toute suggestion est la bienvenue. Ce problème commence à prendre tout mon temps et je n'arrive pas à avancer.

    Avatar7575

  2. #2
    Membre averti 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 : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 441
    Points
    441
    Par défaut
    Salut.

    Il faut que tu différencies les différents éléments du MVC.
    Dans le cas que tu donnes, je pense que UserV3 représente un objet métier (je me trompe ?).
    A mon avis, le champ de la case à cocher n'a rien à faire dans cet objet.

    Le contrôle tu peux le faire dans la servlet.
    Tu créés une méthode avec en paramètre la request par exemple, et tu testes tous tes champs.

  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
    Bonjour,
    je vous remercie pour votre réponse. mais le prof vient de donner la correction.
    Apparemment, il faut mettre la case à stocker dans la classe User car il faut stocker quelque part le fait que l'utilisateur a accepté les conditions générales du site.


    Donc, voilà :
    la classe User :
    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
     
    public class Inscription {
     
    	private String login;
    	private String email;
    	private boolean conditionsGeneralesApprouvees;
    	private Date creation;
     
    	public String getLogin() {
    		return login;
    	}
     
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
    	public String getEmail() {
    		return email;
    	}
     
    	public void setEmail(String email) {
    		this.email = email;
    	}
     
    	public Date getCreation() {
    		return creation;
    	}
     
    	public boolean isConditionsGeneralesApprouvees() {
    		return conditionsGeneralesApprouvees;
    	}
     
    	public void setConditionsGeneralesApprouvees(boolean conditionsGeneralesApprouvees) {
    		this.conditionsGeneralesApprouvees = conditionsGeneralesApprouvees;
    	}
     
    	public void validate() throws InscriptionInvalideException {
    		Map<String, String> errorMessages = new HashMap<>();
     
    		if (!Objects.toString(login, "").matches("\\S+")) {
    			errorMessages.put("login", "Le login n'est pas correctement renseigné !");
    		}
    		if (!Objects.toString(email, "").matches("\\S+@\\S+")) {
    			errorMessages.put("email", "L'e-mail est invalide !");
    		}
    		if (!conditionsGeneralesApprouvees) {
    			errorMessages.put("conditionsGeneralesApprouvees", "Vous devez approuver les conditions générales !");
    		}
     
    		if (!errorMessages.isEmpty()) {
    			throw new InscriptionInvalideException(errorMessages);
    		}
     
    		this.creation = new Date();
    	}
    }
    Voilà, j'espère que cette solution servira pour les internautes.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/01/2006, 11h28
  2. Comment récupérer l'état d'une case à cocher
    Par oursquetaire dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/01/2006, 08h58
  3. Paramètres d'une "case à cocher"
    Par PAUL87 dans le forum IHM
    Réponses: 4
    Dernier message: 14/12/2005, 14h28
  4. [Forms 6i] Ne chocher qu'une case à cocher.
    Par macben dans le forum Oracle
    Réponses: 1
    Dernier message: 02/12/2005, 15h40
  5. Pb pour récupérer la velur d'une case à cocher
    Par muppetshow dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/04/2005, 21h23

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