Bonjour à tous, je suis confronté à une difficulté en JSF qui me tracasse et je viens solliciter votre aide. En effet je suis entrain de réaliser une application en Java EE avec JSF,GlassFish et primefaces.
Il s'agit de la création d'utilisateur.Pour ce faire j'ai créé une classe utilisateur
Après cela voic la classe UtilisateurDao
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 @Entity @ManagedBean public class Utilisateur implements Serializable{ @Id @GeneratedValue( strategy = GenerationType.IDENTITY ) private Long pk_iduser; @NotNull(message="Veuillez remplir le nom") @Size(min=3,message="Le nom doit contenir au moins 2 caractères!") private String nom; @NotNull(message="Veuillez remplir le prénom") @Size(min=3,message="Le prénom doit contenir au moins 2 caractères!") private String prenom; @NotNull(message="Veuillez remplir le numéro de téléphone") @Size(min=3,message="Le n° de téléphone doit contenir au moins 5 caractères!") private String telephone; private String statut; @NotNull(message="Veuillez saisir une adresse email valide") @Pattern(regexp="([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)",message="merci de saisir une adresse mail valide") private String email; @NotNull(message="Merci de renseigner le mot de passe") @Size(min=3,message="Le mot de passe doit comporter 5 caractères au minimum") private String motDePasse; public Long getPk_iduser() { return pk_iduser; } public void setPk_iduser(Long pk_iduser) { this.pk_iduser = pk_iduser; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getStatut() { return statut; } public void setStatut(String statut) { this.statut = statut; } public String getMotDePasse() { return motDePasse; } public void setMotDePasse(String motDePasse) { this.motDePasse = motDePasse; }
Voici mon backing bean qui suit
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 @Stateless public class UtilisateurDao { private static final String JPQL_SELECT_PAR_EMAIL="SELECT u FROM Utilisateur u WHERE u.email=:email"; private static final String JPQL_SELECT_PAR_TELEPHONE="SELECT u FROM Utilisateur u WHERE u.telephone=:telephone"; private static final String PARAM_EMAIL="email"; private static final String PARAM_TELEPHONE="telephone"; @PersistenceContext(unitName="gct_PU") private EntityManager em; public void creer(Utilisateur utilisateur) throws DAOException{ try{ em.persist(utilisateur); } catch(Exception e){ throw new DAOException(e); } } public Utilisateur trouverEmail(String email) throws DAOException{ Utilisateur utilisateur=null; Query requete=em.createQuery(JPQL_SELECT_PAR_EMAIL); requete.setParameter(PARAM_EMAIL,email); try{ utilisateur=(Utilisateur)requete.getSingleResult(); } catch(NoResultException e){ return null; } catch(Exception e){ throw new DAOException(e); } return utilisateur; } public Utilisateur trouverTelephone(String telephone) throws DAOException{ Utilisateur utilisateur=null; Query requete=em.createQuery(JPQL_SELECT_PAR_TELEPHONE); requete.setParameter(PARAM_TELEPHONE,telephone); try{ utilisateur=(Utilisateur)requete.getSingleResult(); } catch(NoResultException e){ return null; } catch(Exception e){ throw new DAOException(e); } return utilisateur; } public List<Utilisateur> trouverUser() throws DAOException{ try{ TypedQuery<Utilisateur> query=em.createQuery( "SELECT u FROM Utilisateur u ", Utilisateur.class ); return query.getResultList(); } catch(NoResultException e){ return null; } catch(Exception e){ throw new DAOException(e); } } public void supprimer( Utilisateur utilisateur ) throws DAOException { try { em.remove( em.merge( utilisateur) ); } catch ( Exception e ) { throw new DAOException( e ); } } public void modifier(Utilisateur utilisateur) throws DAOException{ try{ em.merge(utilisateur ) ; } catch(Exception e){ throw new DAOException(e); } } public Utilisateur trouver( long id ) throws DAOException { try { return em.find( Utilisateur.class, id ); } catch ( Exception e ) { throw new DAOException( e ); } } }
Pour l'affichage j'ai créé une page user.xhtml qui est chargée d'afficher l'ensemble des utilisateurs donc j'utilise un datatable comme décrit ci-dessous
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 @ManagedBean @RequestScoped public class InscrireUtilisateurBean implements Serializable{ private static final long serialVersionUID = 1L; private Utilisateur utilisateur; @EJB private UtilisateurDao utilisateurDao; public InscrireUtilisateurBean(){ utilisateur=new Utilisateur(); } public void setUtilisateur(Utilisateur utilisateur) { this.utilisateur = utilisateur; } public Utilisateur getUtilisateur() { return utilisateur; } public void inscrire() throws IOException{ utilisateurDao.creer(utilisateur); FacesContext.getCurrentInstance().getExternalContext().redirect("user.xhtml"); } public List<Utilisateur> getUsers() { return utilisateurDao.trouverUser(); } public void supprimer(Utilisateur utilisateurs) throws IOException{ utilisateurDao.supprimer(utilisateurs); FacesContext.getCurrentInstance().getExternalContext().redirect("user.xhtml"); } public void modifier(Utilisateur utilisateur) throws IOException{ utilisateurDao.modifier(utilisateur); FacesContext.getCurrentInstance().getExternalContext().redirect("user.xhtml"); } }
Quand on clique sur l'icône d'édition la boite de dialogue s'ouvre et tous les champs sont bien remplis avec les données de la ligne sélectionnée mais mon problème est que quand je clique sur le bouton enregistre les données sont pas mises à jour dans la base de données.
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 <p:dataTable id="User" var="User" value="#{inscrireUtilisateurBean.users}" resizableColumns="true" scrollable="true" scrollWidth="100%" selectionMode="single" rowKey="#{User.pk_iduser}" styleClass="order-table" headerClass="order-table-header" rowClasses="order-table-odd-row,order-table-even-row"> <f:facet name="header"> Liste des utilisateurs <p:commandButton id="toggler" type="button" value="Colonnes" style="float:right" icon="ui-icon-calculator" /> <p:columnToggler datasource="User" trigger="toggler" /> </f:facet> <p:column headerText="Nom"> <h:outputText value="#{User.nom}" /> </p:column> <p:column headerText="Prénom(s)"> <h:outputText value="#{User.prenom}" /> </p:column> <p:column headerText="Téléphone"> <h:outputText value="#{User.telephone}" /> </p:column> <p:column headerText="Statut"> <h:outputText value="#{User.statut}" /> </p:column> <p:column headerText="Email"> <h:outputText value="#{User.email}" /> </p:column> <p:column headerText="Supprimer" style="width:50px;text-align: center"> <h:form id="supprimer"> <p:commandButton icon="ui-icon-minus" title="Supprimer" action="#{inscrireUtilisateurBean.supprimer(User)}"/> </h:form> </p:column> <p:column headerText="Editer" style="width:50px;text-align: center"> <h:form id="editer"> <p:commandButton icon="ui-icon-pencil" title="Modifier" update=":ModifierUser" action="#{inscrireUtilisateurBean.setUtilisateur(User)}" oncomplete="PF('dlg2').show()"/> </h:form> </p:column> </p:dataTable>
Voic ma boite de dialogue
Votre aide est la bienvenue je vous remercie!
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 <h:form id="formulaireEdition" > <fieldset> <legend>Inscription</legend> <h:outputLabel for="nom">Nom <span class="requis">*</span></h:outputLabel> <h:inputText id="nom" value="#{inscrireUtilisateurBean.utilisateur.nom}" required="true" size="25" maxlength="60"> <f:ajax event="blur" render="nomMessage" /> </h:inputText> <h:message id="nomMessage" for="nom" errorClass="erreur" /> <br/> <h:outputLabel for="prenom">Prénom(s) <span class="requis">*</span></h:outputLabel> <h:inputText id="prenom" value="#{inscrireUtilisateurBean.utilisateur.prenom}" required="true" size="25" maxlength="60"> <f:ajax event="blur" render="prenomMessage" /> </h:inputText> <h:message id="prenomMessage" for="prenom" errorClass="erreur" /> <br/> <h:outputLabel for="telephone">Téléphone(s)<span class="requis">*</span></h:outputLabel> <h:inputText id="telephone" value="#{inscrireUtilisateurBean.utilisateur.telephone}" required="true" size="25" maxlength="60"> <f:ajax event="blur" render="telephoneMessage" /> </h:inputText> <h:message id="telephoneMessage" for="telephone" errorClass="erreur" /> <br/> <h:outputLabel for="email">Email <span class="requis">*</span></h:outputLabel> <h:inputText id="email" value="#{inscrireUtilisateurBean.utilisateur.email}" required="true" size="25" maxlength="60"> <f:ajax event="blur" render="emailMessage" /> </h:inputText> <h:message id="emailMessage" for="email" errorClass="erreur" /> <br/> <h:outputLabel for="motDePasse">Mot de passe <span class="requis">*</span></h:outputLabel> <h:inputSecret id="motDePasse" value="#{inscrireUtilisateurBean.utilisateur.motDePasse}" required="false" size="25" maxlength="60"> <f:ajax event="blur" render="motDePasseMessage" /> </h:inputSecret> <h:message id="motDePasseMessage" for="motDePasse" errorClass="erreur" /> <br/> <p:outputLabel for="statut" value="statut" /> <p:selectOneMenu effect="fold" id="statut" value="#{inscrireUtilisateurBean.utilisateur.statut}" style="width:125px"> <f:selectItem itemLabel="administrateur principal" itemValue="administrateur principal" /> <f:selectItem itemLabel="administrateur" itemValue="administrateur" /> <f:selectItem itemLabel="standard" itemValue="standard" /> </p:selectOneMenu> <br/> <p:commandButton icon="ui-icon-check" value="Enregistrer" action="#{inscrireUtilisateurBean.modifier(utilisateur)}" styleClass="sansLabel" /> </fieldset> </h:form> </p:dialog> </form>
Partager