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

Développement Web en Java Discussion :

Erreurs du form ne disparaissent pas après validation du champ


Sujet :

Développement Web en Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut Erreurs du form ne disparaissent pas après validation du champ
    Salut ,

    J'ai une petit souci , c'est que dans mon formulaire quand je clique sur valider et que j'ai les champs vides , les erreurs de mon Form (TomodachiForm) s'affiches normalement devant chaque champs dédié mais quand je remplis les champs avec la bonne validation , l'erreur ne veut pas disparaître devant le champ , ca me Forward pas a l'autre page et ça me donne toujours "Inscription échoué" dans la deuxième exécution du formulaire!

    Le code du Form :

    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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    public class TomodachiForm {
     
        // Attribus :
     
        private String                     champ_nom          = "nomT";
        private String                     champ_prenom       = "prenomT";
        private String                     champ_age          = "AgeT";
        private String                     champ_passe        = "passeT";
        private String                     champ_confirmation = "confirmationT";
        private String                     champ_email        = "emailT";
        private String                     champ_adresse      = "adresseT";
        private String                     champ_ville        = "villesT";
        private String                     champ_apropos      = "aproposT";
     
        private String                     forma_date         = "YYYY/MM/DD HH:MM:SS";
     
        private static Map<String, String> erreurs            = new HashMap<String, String>();
     
        private static String              resultats;
     
        public Map<String, String> getErreurs() {
            return erreurs;
        }
     
        public String getResultats() {
            return resultats;
        }
     
        // Methode principal :
     
        public Tomodachi formTomodachi( HttpServletRequest request ) {
     
            String nom = getvalueChamp( request, champ_nom );
            String prenom = getvalueChamp( request, champ_prenom );
            String age = getvalueChamp( request, champ_age );
            String passe = getvalueChamp( request, champ_passe );
            String confirmation = getvalueChamp( request, champ_confirmation );
            String email = getvalueChamp( request, champ_email );
            String adresse = getvalueChamp( request, champ_adresse );
            String ville = getvalueChamp( request, champ_ville );
            String apropos = getvalueChamp( request, champ_apropos );
     
            Tomodachi tomodachi = new Tomodachi();
     
            traiterNom( nom, tomodachi );
            traiterPrenom( prenom, tomodachi );
            traiterAge( age, tomodachi );
            traiterPasse( passe, confirmation, tomodachi );
            traiterEmail( email, tomodachi );
            traiterVille( ville, tomodachi );
            tomodachi.setAdresse( adresse );
            tomodachi.setApropos( apropos );
     
            DateTime dt = new DateTime();
            DateTimeFormatter forma = DateTimeFormat.forPattern( forma_date );
            String date = dt.toString( forma );
     
            tomodachi.setDate_inscription( date );
     
            if ( erreurs.isEmpty() ) {
                resultats = "Inscription réussite";
            } else {
                resultats = "Inscription échoué";
            }
     
            return tomodachi;
        }
     
        // methodes utilitaires :
     
        public void traiterVille( String ville, Tomodachi tomodachi ) {
     
            try {
     
                validationVille( ville );
     
            } catch ( FormsException e ) {
                setErreurs( champ_ville, e.getMessage() );
            }
            tomodachi.setVille( ville );
        }
     
        public void traiterEmail( String email, Tomodachi tomodachi ) {
            try {
     
                validationEmail( email );
     
            } catch ( FormsException e ) {
                setErreurs( champ_email, e.getMessage() );
            }
            tomodachi.setEmail( email );
        }
     
        public void traiterPasse( String motpasse, String confirm, Tomodachi tomodachi ) {
            try {
     
                validationPasse( motpasse, confirm );
     
            } catch ( FormsException e ) {
                setErreurs( champ_passe, e.getMessage() );
                setErreurs( champ_confirmation, null );
            }
            tomodachi.setMot_de_passe( motpasse );
        }
     
        public void traiterAge( String age, Tomodachi tomodachi ) {
            try {
     
                validationAge( age );
     
            } catch ( FormsException e ) {
                setErreurs( champ_age, e.getMessage() );
            }
            tomodachi.setAge( age );
        }
     
        public void traiterPrenom( String prenom, Tomodachi tomodachi ) {
            try {
     
                validationPrenom( prenom );
     
            } catch ( FormsException e ) {
                setErreurs( champ_prenom, e.getMessage() );
            }
            tomodachi.setPrenom( prenom );
        }
     
        public void traiterNom( String nom, Tomodachi tomodachi ) {
            try {
     
                validationNom( nom );
     
            } catch ( FormsException e ) {
                setErreurs( champ_nom, e.getMessage() );
            }
            tomodachi.setNom( nom );
        }
     
        public void validationVille( String ville ) throws FormsException {
     
            if ( ville == null ) {
                throw new FormsException( "Veuillez choisir votre ville" );
            }
     
        }
     
        public void validationEmail( String email ) throws FormsException {
            if ( email != null ) {
                if ( !email.matches( "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)" ) ) {
                    throw new FormsException( "L'adresse email n'est pas valide" );
                }
            } else {
                throw new FormsException( "Veuillez entrer votre adresse email" );
            }
        }
     
        public void validationPasse( String motpasse, String confir ) throws FormsException {
            if ( motpasse != null && confir != null ) {
                if ( !motpasse.equals( confir ) ) {
                    throw new FormsException( "Le mot de passe et la confirmation sont differents" );
                }
                if ( motpasse.length() < 3 ) {
                    throw new FormsException( "Le mot de passe doit contenir plus de 3 caractères" );
                }
     
            } else {
                throw new FormsException( "Veuillez entrer un mot de passe et sa confirmation" );
            }
        }
     
        public void validationAge( String age ) throws FormsException {
     
            if ( age != null ) {
                if ( !age.matches( "^\\d+$" ) ) {
                    throw new FormsException( "L'age doit etre numérique" );
                }
                if ( age.length() > 3 ) {
                    throw new FormsException( "L'age doit contenir 3 chiffres maximum" );
                }
            } else {
                throw new FormsException( "Veuillez entrer votre age" );
            }
     
        }
     
        public void validationPrenom( String prenom ) throws FormsException {
     
            if ( prenom == null ) {
                throw new FormsException( "Veuillez entrer un prenom" );
            }
     
        }
     
        public void validationNom( String nom ) throws FormsException {
     
            if ( nom == null ) {
                throw new FormsException( "Veuillez entrer un nom" );
            }
     
        }
     
        public static String getvalueChamp( HttpServletRequest request, String champ ) {
     
            String value = request.getParameter( champ );
     
            if ( value == null || value.trim().length() == 0 ) {
                return null;
            } else {
                return value.trim();
            }
     
        }
     
        public void setErreurs( String champ, String message ) {
            erreurs.put( champ, message );
        }
     
    }
    Voila le code de mon formulaire :

    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
    <div id="inscription">
     
    <fieldset>
    <legend>Inscription des Tomodachi</legend>
     
    <form action="<c:url value="/Inscription"/>" method="post">
     
    <p><span style="color: red; padding-left: 7%""><c:out value="${formTomo.resultats}"/></span></p><br>
     
    <p><label>Nom : </label>
    <input type="text" value="<c:out value="${beanTomo.nom}"></c:out>" name="nomT"/><span style="color: red;"> * </span>
    <c:out value="${formTomo.erreurs.nomT}"></c:out>
    </p>
     
    <p><label>Prénom : </label>
    <input type="text" value="<c:out value="${beanTomo.prenom}"></c:out>" name="prenomT"/><span style="color: red;"> * </span>
    <c:out value="${formTomo.erreurs.prenomT}"></c:out>
    </p>
     
    <p><label>Age : </label>
    <input type="text" value="<c:out value="${beanTomo.age}"></c:out>" name="AgeT"/><span style="color: red;"> * </span>
    <c:out value="${formTomo.erreurs.AgeT}"></c:out>
    </p>
     
    <p><label>Date d'inscription : </label>
    <input type="text" value="<c:out value="${beanTomo.date_inscription}"></c:out>" name="dateT" disabled="disabled"/> (Automatique)</p>
     
    <p><label>Mot de passe : </label>
    <input type="password" value="" name="passeT"/><span style="color: red;"> * </span>
    <c:out value="${formTomo.erreurs.passeT}"></c:out>
    </p>
     
    <p><label>Confirmation du mot de passe : </label>
    <input type="password" value="" name="confirmationT"/><span style="color: red;"> *</span></p>
     
    <p><label>Email : </label>
    <input type="text" value="<c:out value="${beanTomo.email}"></c:out>" name="emailT"/><span style="color: red;"> * </span>
    <c:out value="${formTomo.erreurs.emailT}"></c:out>
    </p>
     
    <p><label>Adresse : </label>
    <textarea cols="20" rows="2" name="adresseT"></textarea></p>
     
    <p><label>Ville : </label>
    <select name="villesT">
    <option></option>
    <option>Rabat</option>
    <option>Sale</option>
    <option>Tanger</option>
    <option>Ifrane</option>
    <option>Agadir</option>
    <option>Tetouan</option>
    <option>Marrakech</option>
    <option>Casablanca</option>
    </select><span style="color: red;"> * </span>
    <c:out value="${formTomo.erreurs.villesT}"></c:out>
    </p>
     
    <p><label>A propos de vous : </label>
    <textarea cols="40" rows="4" name="aproposT"></textarea></p>
     
     
    <p style="padding-left: 18%"><input type="submit" value="Valider"> <input type="reset" value="Remettre a zero"></p>
    </form>
     
    </fieldset>
     
     
    </div>
    Le code de la servlet d'Inscription:

    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
    public class Inscription extends HttpServlet {
        private static final long   serialVersionUID     = 1L;
     
        private static final String vue_inscription      = "/WEB-INF/inscription.jsp";
        private static final String vue_acceuilTomodachi = "/WEB-INF/acceuil_tomodachi.jsp";
     
        private static final String tomodachiForm        = "formTomo";
        private static final String tomodachiBean        = "beanTomo";
     
     
        public Inscription() {
            super();
            // TODO Auto-generated constructor stub
        }
     
     
        protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
                IOException {
            this.getServletContext().getRequestDispatcher( vue_inscription ).forward( request, response );
        }
     
        protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
                IOException {
     
            TomodachiForm formT = new TomodachiForm();
            Tomodachi tomodachi = formT.formTomodachi( request );
     
            request.setAttribute( tomodachiForm, formT );
            request.setAttribute( tomodachiBean, tomodachi );
     
            if ( formT.getErreurs().isEmpty() ) {
                this.getServletContext().getRequestDispatcher( vue_acceuilTomodachi ).forward( request, response );
            } else {
     
                this.getServletContext().getRequestDispatcher( vue_inscription ).forward( request, response );
            }
        }
    }
    Voila l'image du problème :
    Images attachées Images attachées  

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjor,

    Dans ton TomodachiForm ne déclare pas "erreurs", et "resultats" en static ! Sinon ça veut dire que tu as une seule instance de ces variables dans toute ton application ! ça veut dire que toutes les erreurs de tous les utilisateurs de ton appli étaient enregistrées dans la même Map, idem pour le résultat, chaque utilisateur vient écraser la même variable "resultat"...

    Change ton code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class TomodachiForm {
    // ...
    private Map<String, String> erreurs = new HashMap<String, String>();
    private String  resultats;
    // ...
    }
    Romain.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Ah oui ca marche maintenant , mais j'avoue que je comprend pas encore le Static et aussi le Final a quoi ca sert , si vous pouvez me donner une explication simple svp . merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    "static" devant une variable, ça veut dire que la variable appartient à la classe et non pas à l'instance des objets que tu crées.

    Donc dans ton cas tu avais donc une seul variable "erreurs" qui appartenait à TomodachiForm partagée par toutes les instances de tes formulaires. Les instances ça correspond à : TomodachiForm formT = new TomodachiForm();. "formT" est une instance de TomodachiForm.

    Si tu marques une variable final tu ne peux plus la réaffecter plus tard dans ton code, tu ne peux appeler que des méthodes sur cette variable. Pour comprendre passe ta variable "resultats" en final et tu verras que ça ne compilera plus dans Eclipse sur les lignes où tu fais : resultats = "xxxxx";

    Romain.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Ah d'accord , je vais faire les tests pour ça merci ! juste un petit problème de plus , dans la date j'utilise la bibliothèque jodaTime (DateTime) pour afficher la date du system sous la form "YYYY/MM/DD HH:MM:SS" mais comme vous pouvez le voir dans l'image que j'ai mis dans la pièce jointe , la date ne s'affiche pas correctement , ça m'affiche : 2013/08/218 11:08:04 l'heure n'est pas exacte et il y as un probleme dans le jour de la semaine , sachant que dans mon bean je déclare la date_inscription avec type String et dans le TomodachiForm je l'ajoute dans le bean avec la forma ..

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Ton pattern n'est pas bon. "DD" ça veut dire que ça va te renvoyer le jour dans l'année. Dans ton cas ça veut dire que c'était le 218ème jour de l'année. Utilise "dd" à la place : "YYYY/MM/dd HH:MM:SS";

    Pour l'heure inexacte c'est peut-être ton serveur qui n'est pas à l'heure ? Ou la timezone par défaut de ton serveur qui n'est pas celle de Paris ? Tu peux aussi forcer la timezone de ta date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DateTime dt = new DateTime(DateTimeZone.forID("Europe/Paris"));
    DateTimeFormatter formatter = DateTimeFormat.forPattern( forma_date );
    String date = dt.toString( formatter );
    Romain.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Peut être que c'est l'heure de du serveur mais comment la configurer ? si non , je ne suis pas de Paris mais de Casablanca, j'ai essayer avec ça mais ça n'as pas marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     DateTime dt = new DateTime( DateTimeZone.forID( "Africa/Casablanca" ) );
            DateTimeFormatter forma = DateTimeFormat.forPattern( forma_date );
            String date = dt.toString( forma );

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/11/2018, 11h50
  2. Réponses: 11
    Dernier message: 08/05/2014, 18h10
  3. Réponses: 2
    Dernier message: 01/10/2007, 10h27
  4. Réponses: 2
    Dernier message: 27/07/2006, 09h30
  5. Réponses: 3
    Dernier message: 01/06/2006, 11h23

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