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 :

utilisation d'un managed bean par un autre


Sujet :

JSF Java

  1. #1
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut utilisation d'un managed bean par un autre
    Bonjour,

    J'ai une application web avec plusieurs JSP et un managed bean de session, avec des attributs modifies selon les choix dans les formulaires des JSP.
    J'ai dans mes JSP des boutons "Back" et "Continue", dont l'action depend des attributs de mon bean. Je les relie donc a une methode de mon bean qui en fonction des attributs renvoie une certaine action a effectuer.
    Pour faire plus propre, j'ai voulu mettre toutes ces methodes dans un request bean, qui utiliserait les methodes de mon session bean.

    En utilisant ce que j'ai trouve sur internet, voila ce que j'ai ecrit:

    mon faces-config.xml:

    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
      <managed-bean>
        <managed-bean-name>StairliftSurvey</managed-bean-name>
        <managed-bean-class>OrderingSystem.view.StairliftSurvey</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
      </managed-bean>
      <managed-bean>
        <managed-bean-name>Navigation</managed-bean-name>
        <managed-bean-class>OrderingSystem.view.Navigation</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>StairliftSurvey</property-name>
            <property-class>OrderingSystem.view.StairliftSurvey</property-class>
            <value>#{StairliftSurvey}</value>
        </managed-property>
      </managed-bean>
    mon session bean:

    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
    package OrderingSystem.view;
     
    public class StairliftSurvey {
     
        public StairliftSurvey() {
        }
     
        private String seat;
     
        public void setSeat(String seat) {
            this.seat = seat;
        }
     
        public String getSeat() {
            return seat;
        }
    }
    mon request bean:

    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
    package OrderingSystem.view;
     
    import javax.faces.context.FacesContext;
     
    public class Navigation {
     
        public Navigation() {
        }
        public String ContinueCarriage () {
     
            FacesContext facesContext = FacesContext.getCurrentInstance();
            StairliftSurvey stairliftsurvey
                = (StairliftSurvey)facesContext.getApplication()
                  .createValueBinding("#{StairliftSurvey}").getValue(facesContext);
     
     
            if (stairliftsurvey.getSeat()=="Standard")
                return "SetWeight";
            else
                return "Continue";
        }
    }
    et enfin dans le JSP ou j'utilise ces beans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                <af:selectOneRadio label="Seat:"
                                   value="#{StairliftSurvey.seat}">
                  <af:selectItem label="Standard" value="Standard" id="Standard"/>
                  <af:selectItem label="Perch" value="Perch" id="Perch"/>
                </af:selectOneRadio>
    ...
    <af:commandButton text="Continue" action="#{Navigation.ContinueCarriage}"/>
    Mais a l'execution, j'ai l'exception suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    javax.faces.FacesException: #{Navigation.ContinueCarriage}: javax.faces.el.EvaluationException: javax.faces.FacesException: javax.faces.FacesException: Can't set managed bean property: 'StairliftSurvey'.	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78)
    ...
    Est-ce que cela veut dire que mon session bean n'est pas instancie? pourtant je l'utilise bien deja dans le meme JSP. Savez-vous d'ou cela peut venir?

    Merci d'avance,

    Romain

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    Effectivement ton bean Navigation n'est pas instancié.

    tu devrais quelque part avoir un truc de ce genre la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Navigation nav = new Navigation();
    FacesContext fc = FacesContext.getCurrentInstance();
    Application app = fc.getApplication();
    app.createValueBinding("#{sessionScope.visit}").
    			setValue(getFacesContext(), nav);
    Ansi tu met ton bean en session.

  3. #3
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    J' ai essaye de rajouter ton code dans le constructeur du managed bean StairliftSurvey, mais il me dit: method 'getFacesContext' not found. Apparement il faut lui donner un argument...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    oups excuse moi ce n'est pas getFacesContext() qu'il faut mettre mais fc.

    et d'ailleur ce n'est pas ("#{sessionScope.visit}") mais ("#{sessionScope.nav}")

    je te redonne le code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Navigation nav = new Navigation();
    FacesContext fc = FacesContext.getCurrentInstance();
    Application app = fc.getApplication();
    app.createValueBinding("#{sessionScope.nav}").
    			setValue(fc, nav);
    En faites j'ai fait la meme chose que toi. donc je t'ai copier/coller mon code en le modifiant pour l'appliquer à ton cas. Mais j'ai apparement oublié de modifier quelques petites choses.

    Et donc chez moi mon bean s'apelle Visit d'ou le ("#{sessionScope.visit}") qui trainait. Et getFacesContext() me renvoie FacesContext.getCurrentInstance();

  5. #5
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Ca ne change rien j'ai toujours la meme exception... mais en regardant dans le log du serveur, je vois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    27-Jul-2006 15:24:51 com.sun.faces.application.ApplicationAssociate createAndMaybeStoreManagedBeans
    SEVERE: Managedbean Navigation could not be created Can't set managed bean property: 'StairliftSurvey'.
    javax.faces.FacesException: Can't set managed bean property: 'StairliftSurvey'.
    	at com.sun.faces.config.ManagedBeanFactory.setPropertiesIntoBean(ManagedBeanFactory.java:576)
    	at com.sun.faces.config.ManagedBeanFactory.newInstance(ManagedBeanFactory.java:233)
    	at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:256)
    	at com.sun.faces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:78)
    ...
    ou as-tu mis, chez toi, la partie de code que tu m'as donnee?

    bon au pire c'est pas grave c'etait juste pour pas avoir un seul managed bean trop gros.
    par contre j'ai un autre truc qui ne marche pas (enfin, c'est surtout que je ne sais pas comment faire ) et qui est plus important, je fais un autre post

    merci beaucoup en tout cas!

  6. #6
    Membre régulier
    Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 89
    Points : 111
    Points
    111
    Par défaut
    Est ce que ceci est vraiment utile?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <managed-property>
            <property-name>StairliftSurvey</property-name>
            <property-class>OrderingSystem.view.StairliftSurvey</property-class>
            <value>#{StairliftSurvey}</value>
    </managed-property>
    Comme tu fait un lookup pour retrouver ton bean StairliftSurvey, tu devrais pouvoir t'en passer (parce que ton erreur concerne ce bean en fait)

  7. #7
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    C'est bon! ca a l'air de marcher... merci beaucoup!

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

Discussions similaires

  1. Utilisation d'un managed-bean session dans un autre Bean
    Par thefutureisnow dans le forum JSF
    Réponses: 3
    Dernier message: 23/11/2009, 14h36
  2. Utilisation d'une dll native par une toolbar managée
    Par didierll dans le forum C++/CLI
    Réponses: 1
    Dernier message: 10/07/2007, 07h56
  3. Réponses: 4
    Dernier message: 11/10/2006, 21h36
  4. "la webcam est utilisée par une autre application!" ah bon???
    Par cortex024 dans le forum Périphériques
    Réponses: 2
    Dernier message: 04/05/2006, 12h13
  5. Comment lire un fichier DB en cours d'utilisation par 1 autr
    Par jbat dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 11h06

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