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 :

SelectOneMenu et Submit()


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut SelectOneMenu et Submit()
    Bonjour, voici un bout de mon code jsf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <h:selectOneMenu  value="#{beanArticle.modele.nummod }" immediate="true" onchange="this.form.submit();" valueChangeListener="#{beanArticle.processValueChange }">
    			<f:selectItems  value="#{beanArticle.modeleItems }" />
    			</h:selectOneMenu><h:outputLabel value="Modele"></h:outputLabel>
     
     
     
    			<h:selectOneMenu value="#{beanArticle.article.numart }">
    			<f:selectItems value="#{beanArticle.articlesItems}"/>
    			</h:selectOneMenu>
    L'idée, c'est qu'a la selection d'un modele dans la premiere combobox, le second combo s'actualise et donne la liste d'article diponible pour le modele selectionné...

    Voici le code qui peuple la premiere combo(fonctionnel)
    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
    public void createListModeleItems(){
     
    		List<Modele>listmodele=(List<Modele>) proxy1.GetAllEntity(Modele.class, null);
    		SelectItem s = new SelectItem();
    		s.setValue("0");
    		s.setLabel("Choix Modele");
    		modeleItems.add(s);
     
    		for(Modele m:listmodele){
    			SelectItem sel = new SelectItem();
    			sel.setValue(m.getNummod());
    			sel.setLabel(m.getDsgmod());
    			modeleItems.add(sel);
    			}
     
     
    	}
    	public List<SelectItem> getModeleItems() {
    		this.modeleItems.removeAll(modeleItems);
    		createListModeleItems();
    		return modeleItems;
    	}
     
    	public void setModeleItems(List<SelectItem> modeleItems) {
    		this.modeleItems = modeleItems;
    	}
    le code du ValueChangeListener :
    L'entité modele est recupéré en BDD grace a son identifiant passé par le value du 1er Combobox.(modele possede ses getter/setter, il est instancié ds le constructeur, nummod est l'identifiant de l'entite modele)
    Une liste de Composant est recupérée en BDD grace a l'entité modele precedemment retournée.
    Une liste d'articles est créé grace a la liste de composants.
    Une List<SelectItem>articlesItems est créée grace a la liste d'articles precedentes.
    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
    public void processValueChange(ValueChangeEvent arg0)	 {
     
    if(this.modele.getNummod()!=null){
     
    	modele=(Modele) proxy1.GetEntity(modele, this.modele.getNummod());
     
    	@SuppressWarnings("unchecked")
    	List<Composant>listComposant=(List<Composant>) proxy1.GetEntity(Composant.class, "modele", modele);
    	List<Article>listArticle=new ArrayList<Article>();
    	articlesItems.removeAll(articlesItems);
     
    	for(Composant c:listComposant)  listArticle.add( c.getArticle());
     
    	if(!listArticle.isEmpty()){
     
    		for(Article a:listArticle){
     
    			SelectItem articleItem=new SelectItem();
    			articleItem.setValue(a.getNumart());
    			articleItem.setLabel(a.getDsgart());
    			articlesItems.add(articleItem);
    			this.setArticlesItems(articlesItems);
    }
    	}
    				}
     
    						}
    Cette List<SelectItem>articlesItems doit etre recupéré par le 2eme combobox...pour afficher les articles donc, en rapport avec le modele du 1er combobox.

    Le souci, c'est que la liste d'article apparait bien mais pas au bon moment.
    C'est a dire que lorsque l'utilisateur selectionne l'Item XXX dans la 1ere combo, rien ne se passe dans le second combo!

    Ensuite l'utilisateur selectionne l'Item YYY et la liste en rapport avec l'ItemXXX apparait dans le second combo!!!!

    Je crois que l'expression du second combo est evalué avant même que la methode "processValueChange" est passé la liste au setter d'ArticlesItems.

    Si quelqu'un a reussi a me suivre jusque la, je le remercie par avance!!!!

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Il est dans quel scope ton bean?

    essaye de ne pas calculer les selectItems dans un getter, il est appelé plusieurs fois.

    tu peux appeler la méthode dans le constructeur ou une fois et le getter doit seulement retourner la valeur déjà calculé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public List<SelectItem> getModeleItems() {
     
    		return modeleItems;
    	}

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Il est dans quel scope ton bean?

    essaye de ne pas calculer les selectItems dans un getter, il est appelé plusieurs fois.

    tu peux appeler la méthode dans le constructeur ou une fois et le getter doit seulement retourner la valeur déjà calculé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public List<SelectItem> getModeleItems() {
     
    		return modeleItems;
    	}
    Oui effectivement, c'est pas tres propre!
    le bean est en session....
    Au passage, j'ai resolu le souci avec le code suivant qui recupere la newValue!

    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
    public void processValueChange(ValueChangeEvent arg0)	 {
     
     
     
     
    	if(arg0.getNewValue().toString()!=null){
     
    	modele=(Modele) proxy1.GetEntity(modele, arg0.getNewValue().toString());
     
    	@SuppressWarnings("unchecked")
    	List<Composant>listComposant=(List<Composant>) proxy1.GetEntity(Composant.class, "modele", modele);
    	List<Article>listArticle=new ArrayList<Article>();
    	articlesItems.removeAll(articlesItems);
     
    	for(Composant c:listComposant)  listArticle.add( c.getArticle());
     
    	if(!listArticle.isEmpty()){
     
    		for(Article a:listArticle){
     
    			SelectItem articleItem=new SelectItem();
    			articleItem.setValue(a.getNumart());
    			articleItem.setLabel(a.getDsgart());
    			articlesItems.add(articleItem);
    			this.setArticlesItems(articlesItems);
    }
    	}
    				}
     
    						}

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

Discussions similaires

  1. Problème de submit avec h:selectOneMenu
    Par mbinte dans le forum JSF
    Réponses: 4
    Dernier message: 27/05/2009, 16h28
  2. [Portal] Submit dans un portlet
    Par nic211 dans le forum Oracle
    Réponses: 9
    Dernier message: 07/07/2004, 18h37
  3. [Struts]Multi submit
    Par Ho(c)ine. dans le forum Struts 1
    Réponses: 3
    Dernier message: 08/06/2004, 09h43
  4. [html:select][html:options] pb de submit
    Par wazup dans le forum Struts 1
    Réponses: 5
    Dernier message: 03/05/2004, 18h54
  5. [JSP] récupération de l'origine du submit
    Par Jovial dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 26/04/2004, 09h40

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