Bonjour,
Je débute en J2EE / JSF2 et je voulais comprendre comment fonctionne le stockage de beans en session.
Je souhaite stocker un profil utilisateur (infos utilisateurs, droits d'accès etc...) dans ma session afin d'éviter de multiples accès en base.
voila mon managedBean:
et voila l'affichage d'une info depuis une page:
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 package bean; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletRequest; import viacham.bo.AdmRole; import viacham.bo.RelUserPole; import viacham.bs.UtilisateurBS; @ManagedBean @SessionScoped public class ProfilUtilisateur { UtilisateurBS utilisateurBS = new UtilisateurBS(); private AdmRole admRole; private List<RelUserPole> listUserPole; /** Creates a new instance of ProfilUtilisateur */ public ProfilUtilisateur() { } private HttpServletRequest getRequest() { FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext. getExternalContext(); Object request = externalContext.getRequest(); return request instanceof HttpServletRequest ? (HttpServletRequest) request : null; } public AdmRole getAdmRole() { admRole = utilisateurBS.ficheAdmUtilisateur(getRequest().getUserPrincipal().getName()); return this.admRole; } public void setAdmRole(AdmRole admRole) { this.admRole = admRole; } public List<RelUserPole> getListUserPole() { listUserPole = utilisateurBS.listePoleUtilisateur(getRequest().getUserPrincipal().getName()); return listUserPole; } public void setListUserPole(List<RelUserPole> listUserPole) { this.listUserPole = listUserPole; }
jusque la, tout va bien mais la console me signale ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Profil: <h:outputText value="#{profilUtilisateur.admRole.desRole}"/>
en ajoutant "implements java.io.Serializable" à mon managedBean, plus de message mais est-ce la solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ATTENTION: JSF1063 : AVERTISSEMENT ! Définition d'une valeur d'attribut non-sérialisable dans HttpSession (clé : profilUtilisateur, classe de la valeur : bean.ProfilUtilisateur).
En vérifiant si mes données sont bien en session, je me rend compte qu'a chaque actualisation de ma page, ma méthode ficheAdmUtilisateur() (qui va chercher les infos en base) est sollicité !
Est ce que le @SessionScoped fonctionne vraiment ?
Quelle est la bonne pratique ?
merci pour vos réponses
Partager