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 :
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;
    }
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
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)
Quelqu'un saurait-il pourquoi le bean est déjà null dans cette méthode? Et comment remédier au problème?

Merci