Bonjour à tous,
Grâce à votre aide j'ai réussi à faire beaucoup de chose pour le TP qu'on nous a donné ne vous fatiguez s'il vous plaît car je fais encore appel à vous.
Au fait,j'ai un sérieux problème avec la modification d'un étudiant car j'arrive à modifier tout les champs du formulaire sauf le matricule alors que je ne l'ai pas déclaré auto_increment (le matricule est de type varchar).Quand je clique sur le bouton modifier sans touché le matricule(c'est-à-dire sans modifier l'ancien matricule mais en modifiant les autres champs du formulaire) j'ai l'erreur suivante dans le navigateur :
Pièce jointe 171228
En vérifiant dans la table étudiant je constate que l'enregistrement est bien mis à jour et quand je tente de tout modifier y compris le matricule j'ai l'erreur suivante :
Pièce jointe 171229
Il s'agit du message qui se trouve dans le bloque catch de l'objet métier plus précisément à ce niveau :
Voici les codes des classes :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 try{ if(erreurs.isEmpty()){ etudiantDao.ModifierEtudiant(etudiant); resultat = "Succès de la modification."; }else{ resultat = "Echec de la modification."; } }catch(DAOException e){ setErreurs( "imprévu", "Erreur imprévue lors de la création." ); resultat = "Échec de la modification : une erreur imprévue est survenue, merci de réessayer dans quelques instants."; e.printStackTrace(); }
Voici le code de l'objet métier :
Voici le code de la méthode ModifierEtudiant(Etudiant etudiant) :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
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 package CoucheMetier; import static CoucheMetier.ValidationFormUtilitaire.getValeurSaisie; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import DAO.EtudiantDao; import DAOException.DAOException; import LesObjets.Etudiant; public class EtudiantMetierModifier { private static final String nomCons = "nomMo"; private static final String prenomCons = "prenomMo"; private static final String adresseCons = "adresseMo"; private static final String matriculeCons = "matriculeMo"; private static final String matriculeConsModif = "matriculeMod"; private String resultat; private Map<String,String> erreurs = new HashMap<String,String>(); private EtudiantDao etudiantDao; public String getResultat() { return resultat; } public void setResultat(String resultat) { this.resultat = resultat; } public Map<String,String> getErreurs() { return erreurs; } public void setErreurs(Map<String,String> erreurs) { this.erreurs = erreurs; } public EtudiantMetierModifier(EtudiantDao etudiantDao){ this.etudiantDao = etudiantDao; } public Etudiant etudiantInfo(HttpServletRequest request){ //String matriculeModif = getValeurSaisie(request,matriculeConsModif); String matricule = getValeurSaisie(request,matriculeCons); String nom = getValeurSaisie(request,nomCons); String prenom = getValeurSaisie(request,prenomCons); String adresse = getValeurSaisie(request,adresseCons); Etudiant etudiant = new Etudiant(); traitementMatricule(matricule,etudiant); traitementNom(nom,etudiant); traitementPrenom(prenom,etudiant); traitementAdresse(adresse,etudiant); try{ if(erreurs.isEmpty()){ etudiantDao.ModifierEtudiant(etudiant); resultat = "Succès de la modification."; }else{ resultat = "Echec de la modification."; } }catch(DAOException e){ setErreurs( "imprévu", "Erreur imprévue lors de la création." ); resultat = "Échec de la modification : une erreur imprévue est survenue, merci de réessayer dans quelques instants."; e.printStackTrace(); } return etudiant; } private void traitementAdresse(String adresse, Etudiant etudiant) { try{ ValidationAdresse(adresse); }catch(ValidationChamp v){ setErreurs(adresseCons,v.getMessage()); } etudiant.setAdresseEtudiant(adresse); } private void ValidationAdresse(String adresse) throws ValidationChamp { if(adresse != null){ if(adresse.trim().length() < 5){ throw new ValidationChamp("L'adresse doit contenir au moins 5 caractères."); } }else{ throw new ValidationChamp("Veuillez entrer une adresse."); } } private void traitementPrenom(String prenom, Etudiant etudiant) { try{ ValidationPrenom(prenom); }catch(ValidationChamp v){ setErreurs(prenomCons,v.getMessage()); } etudiant.setPrenomEtudiant(prenom); } private void ValidationPrenom(String prenom) throws ValidationChamp { if(prenom != null){ if(prenom.trim().length() < 2){ throw new ValidationChamp("Ce n'est pas un prénom;Vous devez mettre au moins 2 caractères."); } }else{ throw new ValidationChamp("Ce champ ne doit pas être vide."); } } private void traitementNom(String nom, Etudiant etudiant) { try{ ValidationNom(nom); }catch(ValidationChamp v){ setErreurs(nomCons,v.getMessage()); } etudiant.setNomEtudiant(nom); } private void ValidationNom(String nom) throws ValidationChamp { if(nom != null){ if(nom.trim().length() < 2){ throw new ValidationChamp("Ce n'est pas un nom;Vous devez mettre au moins 2 caractères."); } }else{ throw new ValidationChamp("Ce champ ne doit pas être vide."); } } private void traitementMatricule(String matricule, Etudiant etudiant) { try{ ValidationMatricule(matricule); }catch(ValidationChamp v){ setErreurs(matriculeCons,v.getMessage()); } etudiant.setNumEtudiant(matricule); } private void ValidationMatricule(String matricule) throws ValidationChamp { if(matricule == null){ throw new ValidationChamp("Ce champ ne doit pas être vide."); } } private void setErreurs(String champ, String messageChamp) { erreurs.put(champ, messageChamp); } }
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 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import static DAO.DAOUtilitaire.*; import DAOException.DAOException; import LesObjets.Etudiant; public class EtudiantDaoImpl implements EtudiantDao { private static final String SelectionCons = "call SelectionEtudiant()"; private static final String insertionEtudiant = "call AjoutEtudiant(?,?,?,?)"; private static final String suppressionEtudiant = "call SuppressionEtudiant(?)"; private static final String SelectionParNumEtudiantCons = "call SelectionParNumEtudiant(?)"; private static final String UpdateEtudiantCons = "call UpdateEtudiant(?,?,?,?,?)"; private DAOFactory daoFactory; EtudiantDaoImpl(DAOFactory daoFactory){ this.daoFactory = daoFactory; }@Override public void ModifierEtudiant(Etudiant etudiant) throws DAOException { Connection connexion = null; PreparedStatement preparedStatement = null; try{ connexion = daoFactory.getConnection(); preparedStatement = connexion.prepareStatement(UpdateEtudiantCons); preparedStatement.setString(1, etudiant.getNumEtudiant()); preparedStatement.setString(2, etudiant.getNomEtudiant()); preparedStatement.setString(3, etudiant.getPrenomEtudiant()); preparedStatement.setString(4, etudiant.getAdresseEtudiant()); preparedStatement.setString(5, etudiant.getNumEtudiant()); int confModif = preparedStatement.executeUpdate(); if(confModif == 0){ throw new DAOException("Echec de la modification.Veuillez réessayer."); } }catch(SQLException s){ throw new DAOException(s); }finally{ fermeturesSilencieuses(preparedStatement,connexion); } }
Voici le code de la méthode doPost() :
Pour ce qui est deCode:
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 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String matricule = request.getParameter(matriculeCons); EtudiantMetierModifier etudiantModif = new EtudiantMetierModifier(etudiantDao); Etudiant etudiant = etudiantModif.etudiantInfo(request); request.setAttribute(etudiantMetierCons, etudiantModif); request.setAttribute(etudiantCons, etudiant); if(etudiantModif.getErreurs().isEmpty()){ HttpSession session = request.getSession(); Map<String,Etudiant> resultas = (Map<String, Etudiant>) session.getAttribute(sessionEtudiantUnique); if( resultas != null){ Etudiant etudiant1 = resultas.get(matricule); etudiantDao.ModifierEtudiant(etudiant1); } resultas.put(etudiant.getNumEtudiant(), etudiant); session.setAttribute(etudiantSession, resultas); this.getServletContext().getRequestDispatcher(formSucces).forward(request, response); }else{ this.getServletContext().getRequestDispatcher(cheminModif).forward(request, response); } }
je l'ai initialisé dans le filtre dont voici le code :Code:Map<String,Etudiant> resultas = (Map<String, Etudiant>) session.getAttribute(sessionEtudiantUnique);
Je rappelle que je peux modifier tout les champs du formulaire sauf le matricule.Le dernier point d’interrogation dansCode:
1
2
3
4
5
6
7
8
9
10
11
12 if(session.getAttribute(etudiantUnique) != null || session.getAttribute(etudiantUnique) == null){ String Matricule = request.getParameter(matriculeCons); List<Etudiant> etudiantTrouve = etudiantDao.EtudiantSelectionner(Matricule); Map<String,Etudiant> mapEtudiantTrouve = new HashMap<String,Etudiant>(); for(Etudiant etudiant1 : etudiantTrouve){ if(Matricule.equals(etudiant1.getNumEtudiant())){ mapEtudiantTrouve.put(etudiant1.getNumEtudiant(), etudiant1); } } session.setAttribute(etudiantUnique, mapEtudiantTrouve); }
représente l'ancien matricule c'est-à-dire celui qu'on voit dans l'url lorsque l'on positionne la souris sur un enregistrement et le premier point d’interrogation représente le matricule que l'on veux mettre à la place de l'ancien.Merci d'avance!!!Code:private static final String UpdateEtudiantCons = "call UpdateEtudiant(?,?,?,?,?)";