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 :

<f:selectItems double passage


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 210
    Par défaut <f:selectItems double passage
    Bonjour je viens de faire le tuto :

    et je ne comprends pas trop pourquoi le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:selectOneMenu value="#{myBean.selectedItem}">
        <f:selectItems value="#{myBean.selectItems}" />
        <f:converter converterId="fooConverter" />
    </h:selectOneMenu>

    rentre deux fois dans la methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public List<SelectItem> getSelectItems() {
        System.out.println("getSelectItems");
        return selectItems;
    }
    voici la sortie en affichant ma jsp :

    getSelectItems
    getSelectItems

    merci

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    Rien à comprendre la dedans, ça dépend de l'implémentation du composant selectOneMenu, qui dans ton cas appèlle cette méthode 1 fois. Elle aurait pu cacher le résultat et ne l'appeler qu'une fois, comme elle aurait pu l'appeler 4 fois

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 210
    Par défaut
    En fait mon problème est

    dans mon bean j'ai ma methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public List<SelectItem> getListeContacts() {
       List<SelectItem> liste =  new ArrayList<SelectItem>();
       ....
       this.contactService.getListe();
       ....
       return liste ;
    }
    et dans ma jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:selectOneMenu id="contact" value="#{rechActionBean.idContact}" onchange="this.form.submit();" >
      <f:selectItems value="#{rechActionBean.listeContacts}" />
    </h:selectOneMenu>
    Et du coup ca marche mais mon service est invoqué 2 fois, et c'est ce que j'aimerais éviter.

    merci

  4. #4
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Peut être un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    private List<SelectItem> items;
     
    public List<SelectItem> getListeContacts() {
      if(items==null) {
         items =  new ArrayList<SelectItem>();
         ....
         this.contactService.getListe();
         ....
       }
     
       return items ;
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 210
    Par défaut
    Sinon pour en revenir à l'implémentation du composant selectOneMenu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:selectOneMenu value="#{myBean.selectedItem}">
        <f:selectItems value="#{myBean.selectItems}" />
        <f:converter converterId="fooConverter" />
    </h:selectOneMenu>
    je ne comprends quand même pas pourquoi il invoque 2 fois la métode :

    selectItems

  6. #6
    Membre éprouvé Avatar de rushtakn
    Inscrit en
    Mai 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 213
    Par défaut
    je up ce topic parce que j'ai rencontré le même comportement.
    J'ai d'abord cru à une erreur de ma part et j'ai cherché un peut partout d'où ça pouvait venir alors qu'en fait ça à l'air d'etre le comportement par défaut ...

    Y'a que moi qui trouve ça "anormal", surtout si y'a des traitements lourds qui sont effectués dans la méthode ? Le pire c'est que si on fait pas gaffe à ses logs, ben on le sait pas qu'on est en train de se faire piner par un double appel !!

    J'utilise jsf 1.1, ça a peut etre changé à la 1.2 ?

    Dans tous les cas, si quelqu'une à un explication sur la raison d'un tel fonctionnement, ça m'interesse.

    Edit : Je me reponds à moi même, apparemment ça aurait un rapport avec le cycle de vie de jsf qui fait qu'un getter peut être appelé plusieurs fois et que du coup il serait déconseillé d'ecrire du code dans un getter.

Discussions similaires

  1. [List<List<double> >] passage en paramètre
    Par popoms dans le forum C++/CLI
    Réponses: 13
    Dernier message: 05/04/2016, 10h51
  2. Vector , passage de double entre vector
    Par croumir dans le forum SL & STL
    Réponses: 3
    Dernier message: 14/06/2007, 22h39
  3. Passage de string en double
    Par boulette85 dans le forum Langage
    Réponses: 12
    Dernier message: 18/02/2007, 16h25
  4. passage de double en return
    Par Romain93 dans le forum C
    Réponses: 2
    Dernier message: 21/10/2006, 22h37

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