Bonjour,
voila, je suis en peu perplexe, je me pose des questions sur comment gérer proprement un état dans JSF2.
En gros je cherche à gérer une sorte de session, je sais qu'il existe l'objet HTTPSession mais on peut aussi travailler avec les managedBean
et l'injection d'un ManagedBean dans un autre en déclarant SessionScope dans le premier. Je ne vois pas bien la différence ?
Comment faites vous ?
Par ailleurs, j'ai un problème quand je passe d'un page à l'autre.
J'ai un Bean, qui doit gérer ma session
je vais de la page choix.xhtml à la page question.xhtml
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 @ManagedBean(name="ConfigurationSession") @SessionScoped public class ConfigurationSession { private String degre; /** * Creates a new instance of ConfigurationSession */ public ConfigurationSession() { } public String getDegre() { return degre; } public void setDegre(String degre) { this.degre = degre; } }
la première injecte ce bean session avec
apparemment cela fonctionne mais quand je passe de la page choix à question entre deux j'ai la méthode
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 public class ChoiceManagedBean implements Serializable{ String degreitems; @ManagedProperty(value = "#{configurationSession}") ConfigurationSession configsession; @EJB ConfigurationSessionBeanLocal config; /** * Creates a new instance of ChoiceManagedBean */ public ChoiceManagedBean() { } @PostConstruct public void init(){ configsession = new ConfigurationSession(); } public ConfigurationSession getConfigsession() { return configsession; } public void setConfigsession(ConfigurationSession configsession) { this.configsession = configsession; } ... public void changedegre() { System.out.println("la question " + this.degreitems); String outcome = null; if("degre1".equals(this.degreitems)){ outcome = "coreTemplateClient"; configsession.setDegre("deg1"); } if("degre2".equals(this.degreitems)){ outcome = "coreTemplateClient"; configsession.setDegre("deg2"); } if(outcome!=null){ System.out.println("Redirection"); FacesContext context = FacesContext.getCurrentInstance(); NavigationHandler navigationHandler = context.getApplication() .getNavigationHandler(); navigationHandler.handleNavigation(context, null, outcome + "?faces-redirect=true"); }else{ String message = "Vous devez choisir un degré !!"; System.out.println("message erreur"); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(message)); } }
changedegre, qui fonctionne et qui redirige vers la page question, le pb arrive quand dans la page question
je veux récupérer mon bean session ....
J'ai le code d'erreur
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 public class QuestionnaireControler { private String theme; public String question; private Map<String,String> questions; private List<SelectItem> questionsitems; private List<EticQuestions> listeQuestionsLocal; private EticQuestions questionLocal; private boolean themeactif=true; ConfigurationSession configsession; private String intitule ="Ajouter un thème"; /** * Creates a new instance of QuestionnaireControler */ public QuestionnaireControler() { questionLocal = new EticQuestions(); questionLocal.setLibelleQuestion("Saisir votre intitulé"); } @PostConstruct public void init(){ configsession = new ConfigurationSession(); configsession = findBean("configurationSession"); System.out.println(" config "+ configsession.getDegre()); } @SuppressWarnings("unchecked") public static <T> T findBean(String beanName) { /** Récupéré de Balusc C*/ FacesContext context = FacesContext.getCurrentInstance(); return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class); } /** * Inject ManagedBean dans la session * @return */ public ConfigurationSession getConfigsession() { return configsession; } public void setConfigsession(ConfigurationSession configsession) { this.configsession = configsession; }
Voili voilou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.glassfish.faces.integration.GlassFishInjectionProvider$2.run(GlassFishInjectionProvider.java:382) ... 81 more Caused by: java.lang.NullPointerException at open.ged.jsf.QuestionnaireControler.init(QuestionnaireControler.java:58) ... 86 more
Olivier
Partager