IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Scope request, destruction du bean


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut Scope request, destruction du bean
    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

  2. #2
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut Il suffit de le construire
    Bonjour,

    Je pense que c'est une erreur de base, j'ai eu les mêmes angoisses, il y parfois des nébuleuses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private Cluster currentCluster = new Cluster();
    Il faut initialiser tes propriétés.


    voila

    olivier

  3. #3
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Oui, ça a l'air d'être ce genre de problème...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Pour récupérer mon currentCluster avec les valeurs de mon formulaire, il faut en fait déplacer le code dans la méthode Init et non pas dans la prerender. A partir de ce moment là je récupère bien toutes mes valeurs.

  5. #5
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut Init
    Bonjour,

    Sauf ton respect, quelle méthode Init ??

    Cordialement olivier

  6. #6
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Salut,

    la méthode init de la page web. Mon bean étend AbstractPageBean il possède donc les méthodes init(), prerender(),preprocess(),prerender(),destroy().

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Spring et bean scope request
    Par mthebault dans le forum Spring
    Réponses: 0
    Dernier message: 21/09/2010, 17h25
  2. bean en scope request
    Par *alexandre* dans le forum JSF
    Réponses: 2
    Dernier message: 19/05/2009, 17h39
  3. managed bean et dao et scope request
    Par *alexandre* dans le forum JSF
    Réponses: 2
    Dernier message: 30/09/2008, 08h13
  4. JSP Servlet et bean scope request
    Par yodutouf dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/09/2007, 08h50
  5. Réponses: 5
    Dernier message: 16/07/2007, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo