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

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut Méthode Postconstruct qui est appelée plusieurs fois sur la même vue et propriété qui ne devrait pas être null
    Bonjour,

    j'ai un selectOneRadio qui est bindé à une propriété d'un managedBean helper


    dialogBox.html
    Code html : 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
     
            <p:selectOneRadio id="customRadio" value="#{helper.depVille}" layout="custom">
                <f:selectItem itemLabel="" itemValue="true" />
                <f:selectItem itemLabel="" itemValue="false" />
            </p:selectOneRadio>
     
    plus loin 
    <p:radioButton id="opt1" for="customRadio" itemIndex="0" />
     
    <p:radioButton id="opt2" for="customRadio" itemIndex="1" />
     
    plus loin
    <p:commandButton value="Submit" update="panelId"  
                 actionListener="#{helper.addVille}" />
     
    <p:commandButton value="action1" update="panelId"  
                 actionListener="#{helper.action1}" />
     
    <p:commandButton value="action2" update="panelId"  
                 actionListener="#{helper.action2}" />


    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
     
    @ManagedBean
    @ViewScope
    public class Helper {
     
       private Boolean depVille;
     
       @Postconstruct
       public void init() {
          // ...
          depVille = new Boolean(true);
       }
     
       public void action1() {
       // action1
       }
     
       public void action2() {
       // action2
       }
     
     
    }
    Or il se passe 2 choses bizarre

    1) lorsque je clique sur le bouton "action1" ou "action2" ou "Submit", je passe par la métode @Postconstruct init() alors que je suis sur la même view et que je ne devrais y passer que la première fois
    2) lorsque je clique sur le bouton "Submit ("addVille") et que je mets un point d'arrêt, ma propriété depVille est nulle alors qu'elle ne devrait jamais être nulle (je l'initialise dans ma métode @PostConstruct init())

    Merci d'avance pour vos réponses

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Pour le problème 2, j'arrive à comprendre... si le code que tu montres est le code que tu utilises, tu as une annotation @Postconstruct au lieu de @PostConstruct, c'est bizarre que tu n'ais pas une erreur d'ailleurs...

    Pour l'autre, ton annotation @ViewScoped est bien du type javax.faces.bean.ViewScoped ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour OButterlin et merci pour ta réponse,


    pardon, mais le code que je te montre n'est pas le code original. C'est bien @PostConstruct que j'ai et mon annotation @ViewScoped est bien du type javax.faces.bean.ViewScoped.

    C'est surtout un problème de philosophie auquel je suis confronté

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Alors d'un point de vue philosophique
    Le ViewScoped est assez simple à comprendre, il est associé à une vue (une page xhtml) et c'est tout.
    Si le même ManagedBean a 2 sorties différentes (en terme de pages), ce ne sera pas le même ViewScoped pour les 2 pages (et c'est souvent ce que les développeurs oublient).
    Donc, en résumé, managedBean1 -> sortie page1.xhtml -> action gérée par managedBean1 ==> on est dans le ViewScoped
    Mais, managedBean1 -> page1.xhtml -> managedBean1 -> page2.xhtml ==> on n'est plus dans le même ViewScoped

    Maintenant, pour ton problème, si tu es dans le premier cas, il y a un problème que je ne m'explique pas parce que le @PostConstruct devrait être appelé une seule fois.

    Tu utilises quel serveur et quelle version de JSF2 ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour OButterlin,

    finalement je suis arrivé à trouver la solution.

    La méthode Postconstruct n'est appelée qu'une seule fois, pardon. En revanche j'avais une dialogbox générique qui existaient en plusieurs exemplaires dont une seul était affiché. Je ne sais pas pour quelle raison j'avais un radiobutton qui était setté plusieurs fois du coté serveur, une fois setté pour ma dialogbox visible et une autre fois pour ma dialogbox caché. J'avais donc deux composants graphiques bindé sur la même propriété coté serveur qui était initialisée plusieurs fois. Merci pour ton aide

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Bah, peut-être un copier/coller... ça arrive
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Débutant] Regénération des objets si le form est appelé plusieurs fois
    Par patrickvier dans le forum VB.NET
    Réponses: 22
    Dernier message: 13/05/2015, 08h52
  2. Réponses: 1
    Dernier message: 13/03/2013, 14h17
  3. Réponses: 17
    Dernier message: 19/09/2012, 16h52
  4. Réponses: 0
    Dernier message: 18/09/2012, 11h56
  5. Réponses: 1
    Dernier message: 03/08/2012, 15h06

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