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 :

ValueChangeListener et cycle de vie


Sujet :

JSF Java

  1. #1
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut ValueChangeListener et cycle de vie
    Bonjour,

    donc en résumé rapide j'ai des valueChangeListener sur des listes pour permettre d'affiner une recherche :
    catégorie [liste] -> sous-catégorie [liste]-> période [deux dates]
    le soucis est que pour ma période les dates ne changent jamais alors que la base de données est bien interrogé et les bonne périodes sont remontés jusqu'à mon bean.

    Après quelques recherches j'ai découvert que ma méthode appelé par le valueChangeListener était invoquée au moment de la phase de validation... Donc quand on modifie la sous-catégorie, les champs dates sont mis à jour avec les bonnes valeurs puis vient la phase de maj du modele et les dates sont écrasées...

    Je pensais que les évènements étaient invoqué au moment de la phase Invoke Application Logic, ai-je oublié quelque chose ?

    donc le code ressemble à ça :
    la page JSF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <h:selectOneMenu value="#{critereBean.parametre}"
    valueChangeListener="#{critereBean.parametreChangement}" 
    onchange="submit()">
    <f:selectItems value="#{critereBean.liste_parametre}"/>
    </h:selectOneMenu>
     
    <h:selectOneMenu value="#{critereBean.produit}"
    valueChangeListener="#{critereBean.produitChangement}" 
    onchange="submit()">
    <f:selectItems value="#{critereBean.liste_produit}"/>
    </h:selectOneMenu>
    et une des implémentation des changeListener au niveau du bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public void parametreChangement(ValueChangeEvent even) {
    		parametre = (Integer) even.getNewValue();
    		majProduit();
    		majGrille();
    		majDate();
    	}
    et seul le contenu de Date est écrasé, je n'ai pas de problème sur produit et grille qui sont des listes...

    La trace est la suivante :
    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
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE RESTORE_VIEW(1)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE RESTORE_VIEW(1)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER RESTORE_VIEW(1)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER RESTORE_VIEW(1)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE APPLY_REQUEST_VALUES(2)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE APPLY_REQUEST_VALUES(2)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER APPLY_REQUEST_VALUES(2)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER APPLY_REQUEST_VALUES(2)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE PROCESS_VALIDATIONS(3)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE PROCESS_VALIDATIONS(3)
    // NOTA la il appelle la fonction liée au valueChange...
    [http-8080-Processor24] DEBUG maj produit
    [http-8080-Processor24] DEBUG maj grille
    [http-8080-Processor24] DEBUG maj date
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER PROCESS_VALIDATIONS(3)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER PROCESS_VALIDATIONS(3)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE UPDATE_MODEL_VALUES(4)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE UPDATE_MODEL_VALUES(4)
    [http-8080-Processor24] DEBUG set begdate :: 1998-06-22 to 1998-04-09
    // NOTA : ici le probleme. 1998-06-22 était la nouvelle date à afficher....
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER UPDATE_MODEL_VALUES(4)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER UPDATE_MODEL_VALUES(4)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE INVOKE_APPLICATION(5)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE INVOKE_APPLICATION(5)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER INVOKE_APPLICATION(5)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER INVOKE_APPLICATION(5)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE RENDER_RESPONSE(6)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker beforePhase
    INFO: BEFORE RENDER_RESPONSE(6)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER RENDER_RESPONSE(6)
    13 mars 2007 15:28:04 org.exadel.jsf.PhaseTracker afterPhase
    INFO: AFTER RENDER_RESPONSE(6)

  2. #2
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    ok je répond plutot que d'éditer ça sera plus visible...
    donc après avoir retrouvé jsf in action, effectivement les value-change event sont effectués juste après la validation... donc il faut que je me débrouille pour gérer les valeurs de l'arbre directement avant la mise à jour du modele

  3. #3
    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
    y un truc que je comprend pas. Si c'est une page de recherche, je vois pas à quoi te serve tes valueChangeListener. L'utilisateur ne doit t-il pas renseigner les 4 critéres et ensuite appuyez sur ok. Apres la validation de l'utilisateur tu récupére les infos de tes composants.

  4. #4
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    euh non

    il y a une liste de parametre
    l'utilisateur en choisi 1
    ça met à jour la liste des produits qui correspondent à ce parametre
    il choisit un produit
    et ça met à jour la période pour laquelle ce produit est valide (+ une liste de grille de données)

    edit : et la il choisit la grille qui l'interesse et il peut restreindre l'affichage suivant en précisant une période plus courte ou une zone géographique moins étendu (par défaut ça couvre le monde entier)

  5. #5
    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
    As tu essayé de mettre à jour ton composant dans parametreChangement.

    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     UISelectOne select = (UISelectOne)event.getComponent();
            select.setValue(parametre);
            select.setSubmittedValue(parametre);
    a priori seul setValue est utile à mettre à jour puisque submittedValue est la valeur avant la phase de validation.

  6. #6
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    j'ai pas fait exactement ça, mais c'est l'idée que j'ai retenue hier
    en fait j'ai placé un UIInput lié à mes champs qui posaient problème
    comme ça je met à jour l'objet UIInput et quand arrive la phase de mise à jour du modele ça passe nickel

    bon forcément je n'avais pas vu que le changement de la premiere liste déclenché son propre événement mais également celui de la deuxieme liste (car elle était modifiée...)
    mais j'ai géré ça facilement aussi (la j'ai collé un booléen pour bloqué la deuxieme maj mais je peux passer également par l'arbre des composants, mais comme je suis en phase de test je ne me complique pas la vie)


    merci en tout cas pour les réponses

Discussions similaires

  1. Model de cycle de vie d'un logiciel
    Par apt dans le forum Méthodes
    Réponses: 4
    Dernier message: 29/10/2014, 23h54
  2. Réponses: 7
    Dernier message: 08/03/2007, 09h23
  3. Réponses: 6
    Dernier message: 07/03/2007, 09h32
  4. [Maven2] Cycle de Vie - Phases et Goals
    Par Palmer dans le forum Maven
    Réponses: 4
    Dernier message: 05/03/2007, 22h34
  5. [EJB Stateful] [Cycle de vie] methode remove()
    Par anitshka dans le forum Java EE
    Réponses: 3
    Dernier message: 05/12/2006, 17h31

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