Bonjour tout le monde
J'affiche un datatable de tout les utilisateurs de mon application depuis la BD, en cliquant sur un lien 'modifier' je suis redirigée vers une page contenant les information de l'utilisateur choisi dans un formulaire JSF.
Quant j'effectue les modifications nécessaires et je clique sur le bouton 'modifier' je me suis rendue compte que l'utilisateur ne se modifie pas mais plutot un nouvel utlisateur s'ajoute à la BD.
Comment pourrai-je corriger ça?
Voila le code:
page JSF affichant tous les utilisateurs dans un datatable:
page JSF du formulaire contenant les informations de l'utilisateur choisi (à vouloir modifier):
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 <?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <title>Modification Utilisateur</title> </h:head> <h:body> <f:view> <h:form> <h1><h:outputText value="Modifier Utilisateur"/></h1> <p:dataTable value="#{utilisateurBean.ListeUtilisateur()}" var="item"> <p:column> <f:facet name="header"> <h:outputText value="NomUtilisateur"/> </f:facet> <h:outputText value="#{item.nomUtilisateur}"/> </p:column> <p:column> <f:facet name="header"> <h:outputText value="PrenomUtilisateur"/> </f:facet> <h:outputText value="#{item.prenomUtilisateur}"/> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Email"/> </f:facet> <h:outputText value="#{item.email}"/> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Profil"/> </f:facet> <h:outputText value="#{item.profil.intituleProfil}"/> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Action"/> </f:facet> <p:link outcome="FormModificationUtilisateur" value="Modifier" > <f:param name="nomUtilisateur" value="#{item.nomUtilisateur}" /> <f:param name="prenomUtilisateur" value="#{item.prenomUtilisateur}" /> <f:param name="login" value="#{item.login}" /> <f:param name="password" value="#{item.password}" /> <f:param name="email" value="#{item.email}" /> <f:param name="intituleProfil" value="#{item.profil.intituleProfil}" /> <f:param name="codeProfil" value="#{item.profil.codeProfil}" /> </p:link> </p:column> </p:dataTable> </h:form> </f:view> </h:body> </html>
la méthode du managed Bean:
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 <?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <f:metadata> <f:viewParam name="nomUtilisateur" value="#{utilisateurBean.utilisateur.nomUtilisateur}" /> <f:viewParam name="prenomUtilisateur" value="#{utilisateurBean.utilisateur.prenomUtilisateur}" /> <f:viewParam name="login" value="#{utilisateurBean.utilisateur.login}" /> <f:viewParam name="password" value="#{utilisateurBean.utilisateur.password}" /> <f:viewParam name="email" value="#{utilisateurBean.utilisateur.email}" /> <f:viewParam name="codeProfil" value="#{utilisateurBean.codeProfil}" /> </f:metadata> <h:head> <title>Formulaire de modification Itilisateur</title> </h:head> <h:body> <f:view> <h:form> <h1><h:outputText value="Modifier Utilisateur"/></h1> <p:panelGrid columns="2"> <p:outputLabel value="NomUtilisateur:" for="nomUtilisateur" /> <p:inputText id="nomUtilisateur" value="#{utilisateurBean.utilisateur.nomUtilisateur}" title="NomUtilisateur" /> <p:outputLabel value="PrenomUtilisateur:" for="prenomUtilisateur" /> <p:inputText id="prenomUtilisateur" value="#{utilisateurBean.utilisateur.prenomUtilisateur}" title="PrenomUtilisateur" /> <p:outputLabel value="Login:" for="login" /> <p:inputText id="login" value="#{utilisateurBean.utilisateur.login}" title="Login" /> <p:outputLabel value="Password:" for="password" /> <p:inputText id="password" value="#{utilisateurBean.utilisateur.password}" title="Password" /> <p:outputLabel value="Email:" for="email" /> <p:inputText id="email" value="#{utilisateurBean.utilisateur.email}" title="Email" /> <p:outputLabel value="Profil:" for="profil" /> <p:selectOneMenu id="profil" value="#{utilisateurBean.codeProfil}" > <f:selectItem itemLabel="select one..." itemValue="" /> <f:selectItems var="cat" value="#{utilisateurBean.listeIntituleProfil}" itemLabel="#{cat.intituleProfil}" itemValue="#{cat.codeProfil}"/> </p:selectOneMenu> </p:panelGrid><p:spacer></p:spacer> <br/><br/> <p:commandButton value="Modifier" icon="ui-icon-check" action="#{utilisateurBean.ModifierUtilisateur()}" ajax="false"/> </h:form> </f:view> </h:body> </html>
la méthode du DAO:
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 public String ModifierUtilisateur() { Profil p = utilisateurDao.Find_Profil(CodeProfil); // utilisateur.setCodeUtilisateur(utilisateur.getCodeUtilisateur()); utilisateur.setNomUtilisateur(utilisateur.getNomUtilisateur()); utilisateur.setPrenomUtilisateur(utilisateur.getPrenomUtilisateur()); utilisateur.setLogin(utilisateur.getLogin()); utilisateur.setPassword(utilisateur.getPassword()); utilisateur.setEmail(utilisateur.getEmail()); utilisateur.setProfil(p); utilisateurDao.ModifUtilisateur(utilisateur); return "ModificationUtilisateur"; }
Je vous remercie d'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void ModifUtilisateur(Utilisateur u) { session.beginTransaction(); u = (Utilisateur) session.merge(u); session.update(u); session.getTransaction().commit(); session.flush(); }
Partager