Bonjour tout le monde
Je sollicite votre aide dans un problème qui me torture depuis quelque jour.
Je voudrai récupérer la valeur d'un select et la stocker dans la base de données en tant qu'objet et non pas String.
Je vous explique davantage:
Je voudrai ajouter un utilisateur en fournissant les informations nécessaires dans un formulaire d'une page JSF, parmi ces informations je dois spécifier le profil de cet utilisateur depuis une liste déroulante remplie dynamiquement depuis la table Profil de ma base de données. En choisissant le profil je voudrai que cette valeur soit récupérer en tant qu'objet et non pas String. J'ai utiliser un converter mais j'ai toujours l'erreur suivante:
"j_idt5:list : erreur de validation. La valeur est incorrecte."
Voila mon ManagedBean UtilisateurBean.java:
L'entité Profil.java
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 package Beans; import Dao.ProfilDao; import Dao.UtilisateurDao; import Entités.Profil; import Entités.Utilisateur; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; @ManagedBean public class UtilisateurBean { private Utilisateur utilisateur; private List<String> ListeIntituleProfil; private String selectedMenuItem; // Constructeurs: public UtilisateurBean() { } // Fonction d'initialisation du bean: @PostConstruct public void init() { if (utilisateur == null) { utilisateur = new Utilisateur(); } ProfilDao p = new ProfilDao(); ListeIntituleProfil = new ArrayList<>(); ListeIntituleProfil = p.listeIntituleProfil(); } // Setters et Getters: public Utilisateur getUtilisateur() { return utilisateur; } public void setUtilisateur(Utilisateur utilisateur) { this.utilisateur = utilisateur; } public List<String> getListeIntituleProfil() { return ListeIntituleProfil; } public void setListeIntituleProfil(List<String> ListeIntituleProfil) { this.ListeIntituleProfil = ListeIntituleProfil; } public String getSelectedMenuItem() { return selectedMenuItem; } public void setSelectedMenuItem(String selectedMenuItem) { this.selectedMenuItem = selectedMenuItem; } // Fonction qui ajoute un utiliateur à la BD: public String AjouterUtilisateur() { UtilisateurDao u = new UtilisateurDao(); boolean resultat = u.AjoutUtilisateur(utilisateur); if(resultat==true) { return "succes"; } else { return "echec"; } } public String tester() { return "Test"; } }
Et mon Converter: ProfilConverter.java:
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 package Entités; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; @Entity public class Profil implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private int CodeProfil; private String IntituleProfil; @OneToMany(fetch = FetchType.LAZY) private Set<Utilisateur> utilisateur = new HashSet<>(); // Constructeurs: public Profil() { } public Profil(String IntituleProfil) { this.IntituleProfil = IntituleProfil; } // Setters et Getters: public int getCodeProfil() { return CodeProfil; } public void setCodeProfil(int CodeProfil) { this.CodeProfil = CodeProfil; } public String getIntituleProfil() { return IntituleProfil; } public void setIntituleProfil(String IntituleProfil) { this.IntituleProfil = IntituleProfil; } public Set<Utilisateur> getUtilisateur() { return utilisateur; } public void setUtilisateur(Set<Utilisateur> utilisateur) { this.utilisateur = utilisateur; } }
et finalement une partie de ma page JSF:
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 package Converter; import Entités.Profil; import javax.faces.bean.ManagedBean; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.FacesConverter; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @ManagedBean @FacesConverter(value="profilConverter") public class ProfilConverter implements Converter { // @PersistenceContext // private transient EntityManager em; @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { // return em.find(Profil.class, new Integer(value)); Profil p = new Profil(); p.setIntituleProfil(value); return p; } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { /* Profil profil; profil = (Profil) value; return String.valueOf(profil.getIntituleProfil());*/ return value.toString(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <p:selectOneMenu id="list" value="#{utilisateurBean.utilisateur.profil}" converter="#{profilConverter}" required="true" > <c:selectItem itemLabel="Select One" itemValue="" /> <c:selectItems value="#{utilisateurBean.listeIntituleProfil}" /> </p:selectOneMenu> <p:spacer></p:spacer> <p:commandButton value="Ajouter" icon="ui-icon-check" action="#{utilisateurBean.ajouterUtilisateur()}" ajax="false"/>
Je vous remercie d'avance pour votre aide.
Partager