Salut,
j'ai un soucis avec les beans qui ont un scope request. J'ai un formulaire dont les champs sont liés à mon bean. Mais lorsque je clique sur le bouton pour soumettre ce quetionnaire toutes les valeurs du bean sont mises à null. Et celà dès le passage dans la méthode attachée au clique sur le bouton.
Mon bean est Viewcluster. Il possède un attribut currentCluster qui est bindé sur les différents champs de Viewcluster. Et c'est ce currentCluster dont j'ai besoin dans la méthode invoquée lors du clique sur le bouton de validation de Viewcluster.
J'ai vu plusieurs personnes qui semblent avoir des problèmes avec les beans qui ont un scope request. Ils résolvent le problème en utilisant un bean de session. Dans mon cas, celà n'est pas possible, car la fenêtre est ouverte dans une pop up. Il peut donc y avoir plusieurs fenêtres ouvertes simultanément. Et donc les données bindées seraient incohérentes.
Voici le code :
Voilà l'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 public class Viewcluster extends AbstractPageBean { /** * currentCluster est bindé avec les champs de la page Viewcluster.jsp * */ private Cluster currentCluster; public Viewcluster() { } // Un repository permet de récupérer ou d'enregistrer un objet sur le disquedur @Override public void prerender() { Map<String,String> res = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); String uuid = res.get("uuid"); if((uuid != null) && (!uuid.equals("null"))){ IRepository<Cluster> clusterRepository = ApplicationBean1.getClusterIRepository(); setCurrentCluster(clusterRepository.getObject(UUID.fromString(uuid))); } else { Cluster c = new Cluster(); UUID id = UUID.randomUUID(); hiddenFieldUUID.setValue(id.toString()); c.setId(id); c.setLabel("Nouveau cluster"); setCurrentCluster(c); } } // Méthode attachée au clique sur le bouton public String buttonSave_action() { // TODO: Process the action. Return value is a navigation // case name where null will return to the same page. getCurrentCluster().setSSHInteractive(checkboxIteractivity.isChecked()); IRepository<Cluster> clusterRepository = ApplicationBean1.getClusterIRepository(); clusterRepository.putObject(currentCluster, true); try { FacesContext.getCurrentInstance().getExternalContext().redirect("Viewcluster.jsp?uuid=" + currentCluster.getId()); } catch (IOException ex) { Logger.getLogger(Viewbatch.class.getName()).log(Level.SEVERE, null, ex); } return null; }
Quelqu'un saurait-il pourquoi le bean est déjà null dans cette méthode? Et comment remédier au problème?
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 Description: An unhandled exception occurred during the execution of the web application. Please review the following stack trace for more information regarding the error. Exception Details: javax.el.PropertyNotFoundException Cible inaccessible, 'currentCluster' a renvoyé une valeur nulle Possible Source of Error: Class Name: com.sun.el.parser.AstValue File Name: AstValue.java Method Name: getTarget Line Number: 108 Source not available. Information regarding the location of the exception can be identified using the exception stack trace below. Stack Trace: com.sun.el.parser.AstValue.getTarget(AstValue.java:108) com.sun.el.parser.AstValue.getType(AstValue.java:69) com.sun.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:194) com.sun.webui.jsf.util.ConversionUtilities.convertValueToObject(ConversionUtilities.java:118) com.sun.webui.jsf.util.ConversionUtilities.convertRenderedValue(ConversionUtilities.java:629) com.sun.webui.jsf.component.HiddenField.getConvertedValue(HiddenField.java:125) javax.faces.component.UIInput.validate(UIInput.java:860) javax.faces.component.UIInput.executeValidate(UIInput.java:1065) javax.faces.component.UIInput.processValidators(UIInput.java:666) com.sun.webui.jsf.component.WebuiInput.processValidators(WebuiInput.java:326) javax.faces.component.UIForm.processValidators(UIForm.java:229) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033) javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662) com.sun.faces.extensions.avatar.components.PartialTraversalViewRootImpl.processValidators(PartialTraversalViewRootImpl.java:153) com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.execute(PartialTraversalLifecycle.java:94) javax.faces.webapp.FacesServlet.service(FacesServlet.java:244) org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:267) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288) org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202) org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206) org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150) org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272) com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637) com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568) com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813) com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341) com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Merci
Partager