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 :

Changer les valeurs d'une page en fonction d'une sélection


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Par défaut Changer les valeurs d'une page en fonction d'une sélection
    Bonjour,

    j'ai récemment posé une question similaire, mais ma question était centrée sur un problème spécifique rencontré, et non sur mon problème en général.
    Et comme depuis, j'ai remplacé ce problème par d'autres, je reprends mon problème depuis zéro.

    Je dispose d'une page avec un ensemble de champs variables (dont certains sont éditables).
    Les valeurs dépendent d'une valeur choisie dans une liste déroulante (h:selectone).
    Le bean est obligatoirement en scope "request".

    Ma question est donc... "comment faire celà"?

    J'ai tenté plusieurs méthodes, mais me suis heurté à ma grande relative méconnaissance des mécanismes JSF. En gros, je n'ai jamais réussi à recharger ma page avec les nouvelles valeurs correspondantes au nouveau choix de la liste déroulante...

    Le code que j'ai tenté (parmi d'autres qui ne fonctionnaient pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <h:selectOneMenu 	        		
    	value="#{monBean.currentOffer}"
      required="true"
    	onchange="this.form.submit();">
      <f:selectItems value="#{monBean.allSelectionItems}"/>
    </h:selectOneMenu>
    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
    	/**
             * The selectable offers
             */
       	List<SelectItem> 			allSelectionItems;
     
    	/**
             * The current selection.
             */
    	private OfferObject       currentOffer; 
     
    	//	 =============== INIT ===============================
    	@PostConstruct
    	public void initProfileBean() {   
    		List <OfferObject> allOfferObjects = offerService.getAllOffers();
    		allOffersItems = new ArrayList<SelectItem>();
    		for (OfferObject offer : allOfferObjects)
    		{
    			allOffersItems.add(new SelectItem( offer.getId(),offer.getName() ));
    		}
    		currentOffer			= allOfferObjects.get(0);
    	}
     
     
     
    	//	 =============== Getters / Setter ===============================
     
    	public int getCurrentOfferSelection() {
    		return currentOffer.getId();
    	}
     
    	public void setCurrentOfferSelection(int currentOfferSelection) {
    		this.currentOffer = offerService.getById(currentOfferSelection);
    	}}
    Ici, mes valeurs ne sont pas rechargées.. et mon setter (setCurrentOfferSelection) n'est simplement jamais appelé...

    Si vous avez des idées, je vous en remercie d'avance.. et d'ici là, merci déjà de m'avoir lu jusqu'ici.

  2. #2
    Membre confirmé Avatar de koack
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Par défaut
    Hello,

    n'y aurait il pas un probleme avec le getter et le setter de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private OfferObject       currentOffer; 
     
    public int getCurrentOfferSelection() {
             return currentOffer.getId();
    }
     
    public void setCurrentOfferSelection(int currentOfferSelection) {
             this.currentOffer = offerService.getById(currentOfferSelection);
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Par défaut
    koack, merci de ta réponse.

    Sauf si tu as vu quelque chose qui m'a échappé, je ne vois pas le problème cependant(*) ; les getter/setter sont une "virtualisation" de la sélection courante. Ou plutôt, il s'agit d'une redirection : la sélection courante est en fait l'id de mon offre courante. Et comme j'ai construit ma liste de SelectItems à partir de la liste des Id existant, ça ne pose (normalement) pas de problème (pas sécurité j'ai quand même ajouté un test absent ici par souci de lisibilité)

    * Par contre je ne jurerai pas qu'il s'agit d'une façon de faire "propre". Je ne fais pas toujours les choses dans les règles de l'art (et c'est probablement un euphémisme)

  4. #4
    Membre confirmé Avatar de koack
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Par défaut
    bonjour,

    je ne vois pas le getter setter de currentOffer, il devrait ressembler a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private OfferObject       currentOffer; 
     
    public OfferObject getCurrentOffer() {
             return currentOffer;
    }
     
    public void setCurrentOffer(OfferObject currentOffer) {
             this.currentOffer =currentOffer;
    }
    et
    Ici, mes valeurs ne sont pas rechargées.. et mon setter (setCurrentOfferSelection) n'est simplement jamais appelé...
    Pourquoi serait il appelé ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Par défaut
    Citation Envoyé par koack Voir le message
    bonjour,

    je ne vois pas le getter setter de currentOffer, il devrait ressembler a ca :
    ...
    Et il ressemble en effet à ça.
    Là encore, je n'avais pas mis tout mon code, pour ne pas alourdir.
    Je n'avais inséré que le getter/setter de la sélection courante : puisqu'il était un peu "spécial", il pouvait être la cause de mes problèmes. Les autres sont des ultra classiques ("source"->"générer les getter et setter"!)


    Citation Envoyé par koack Voir le message
    et
    Pourquoi serait il appelé ?
    Là je me heurte probablement à ma méconnaissance de JSF : il me semblait qu'au moment où on soumettait le formulaire (mon "form.submit()") le setter de la sélection courante du h:selectone allait être appelé : ça me semblait logique...
    Mais ce que tu sembles (tacitement) dire, c'est que ce n'est pas le cas... et alors j'en reviens à ma question initiale.. comment alors prendre en compte le changement de sélection pour recharger les champs de ma page en fonction de la nouvelle sélection?

    Merci en tous cas et déjà pour ces premières remarques.

  6. #6
    Membre confirmé Avatar de koack
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Par défaut
    Re,

    donc si j'ai bien compris ce que vous cherchez a faire c'est mettre a jour votre page avec la valeur selectionnée d'un selectOneMenu afin d'agir sur l'affichage d'autres composants dans votre page.

    On va prendre le cas de deux selectOneMenu, le 2 ieme depend du choix du 1er.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <h:selectOneMenu value="#{Bean.currentOffer}" required="true"
    onchange="this.form.submit()" valueChangeListener="#{Bean.eventlistener}">
    <f:selectItems value="#{Bean.allSelectionItems}"/>
    </h:selectOneMenu>	
    <h:selectOneMenu value="#{Bean.currentOfferbis}">
    <f:selectItems value="#{Bean.allSelectionItemsBis}"/>
    </h:selectOneMenu>
    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
     
    //source :
    //http://www.jtips.info/index.php?title=JSF/ValueChangeListener
     
    public void eventlistener(ValueChangeEvent event) {
    PhaseId phaseId = event.getPhaseId();
    if (phaseId.equals(PhaseId.ANY_PHASE)) {
         event.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
         event.queue();
    } 
    else if (phaseId.equals(PhaseId.UPDATE_MODEL_VALUES)) {
    // le champ d'instance myValue est mis à jour par
    // le listener et ne sera pas écrasé plus tard par
    // invocation du setter
    System.out.println("Mise a jour de la valeur des autres composants")
    }
    }
    Ps :

    il me semblait qu'au moment où on soumettait le formulaire (mon "form.submit()") le setter de la sélection courante du h:selectone allait être appelé : ça me semblait logique...
    Je suis d'accord mais le probleme ici c'est que votre getter setter ...CurrentOfferSelection ne correspond pas a value="#{monBean.currentOffer}" donc ne sera jamais appelé

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2014, 12h21
  2. Parametrer la couleur de fonds d'une page en fonction d'une autre
    Par miklbet dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 09/06/2011, 11h21
  3. Réponses: 1
    Dernier message: 20/01/2007, 14h06
  4. [Frames] un lien vers une page de Frames vers une page sans
    Par jamesleouf dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/09/2005, 18h25
  5. inserer une page php externe dans une page JSP
    Par vrossi59 dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 05/07/2005, 16h25

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