Partage
  • Partager sur Facebook
  • Partager sur Twitter

JSF - Creation de listes déroulantes dynamiques

Les choix de la seconde dépendent de la première

9 avril 2012 à 19:47:49

Bonjour à tous,

Une fois de plus, je fais appel à vos compétences.

Aujourd'hui, je souhaite réaliser avec deux
<pou:SelectOneMenu />
, des listes dynamiques, je m'explique :

Une fois que l'utilisateur fait son choix dans la première liste, sans appuyer sur aucun bouton, la seconde se remplit avec les choix liés au choix initial.

J'ai trouvé quelques tutos, mais rien de vraiment concret.

Est-ce possible ?

Merci d'avance
Fred
  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2012 à 3:11:15

Salut,

Oui, c'est possible en affectant un value change listener à ton premier select :
=> http://www.mkyong.com/jsf2/jsf-2-dropdown-box-example/
=> http://www.mkyong.com/jsf2/jsf-2-value [...] ener-example/

Sinon, tu peux aussi utiliser a4j, mais il me semble que cela nécessite l'utilisation de RichFaces et plus seulement JSF :
=> http://stackoverflow.com/questions/134 [...] ed-in-another
=> http://stackoverflow.com/questions/618 [...] her-with-ajax
=> http://stackoverflow.com/questions/296 [...] x-if-both-are

Bon courage, et n'hésite pas à partager ta solution finale si tu y parviens. :)
  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2012 à 9:35:47

Bonjour,

Merci pour cette réponse, ces tutos m'ont bien aidé, mais j'ai quand même un petit souci :

Je n'arrive pas à intégrer la méthode de mon listener, le paramètre semble ne pas être pris en compte :

Voici mon SelectOneMenu :
<pou:selectOneMenu value="#{rechercheTechnicien.nomFamille}" onchange="submit()" valueChangeListener="#{rechercheTechnicien.remplirMarqueCombo(e)}" styleClass="combo1">
                                        <f:selectItems value="#{familleClassBean.familleItem}"/>
                                    </pou:selectOneMenu>


La classe JAVA RechercheTechnicien :
public class RechercheTechnicien implements Serializable{
    
    //Connexion à la bdd
    protected static final Connection connV2 = ConnectionBDDV2.getInstance();
    
    private List<SelectItem> marqueItem;
    int cpt = 0;
    
    private String nomProduit;
    private String nomConduit;
    private String nomFamille;
    private String nomMarque;
    private String nomSpecialite;
    private int competence;
    
    public RechercheTechnicien(){        
    }
    
    //Remplir la combo Marque
    public void remplirMarqueCombo (ValueChangeEvent e){
        
        System.out.println("Test listener !");
    }
}


Et le faces-config.xml :
<!-- Recherche Technicien -->
    <managed-bean>
        <managed-bean-name>rechercheTechnicien</managed-bean-name>
        <managed-bean-class>rechercheERS.RechercheTechnicien</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <!-- Controleur Recherche Technicien -->
    <managed-bean>
        <managed-bean-name>controleurRechercheTechnicien</managed-bean-name>
        <managed-bean-class>rechercheERS.controleur.ControleurRechercheERS</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>rechercheTechnicien</property-name><!--Attribut de la classe session CreationTechnique-->
            <property-class>rechercheERS.RechercheTechnicien</property-class>
            <value>#{rechercheTechnicien}</value>
        </managed-property>
    </managed-bean>


Qu'en pensez-vous ?

Merci d'avance
Fred
  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2012 à 12:29:59

Salut,

T'as essayé avec ça : valueChangeListener="#rechercheTechnicien.remplirMarqueCombo" ?

Cordialement.
  • Partager sur Facebook
  • Partager sur Twitter
15 avril 2012 à 21:53:55

Bonjour,

Oui j'ai essayé, mais rien ne se passe.
Pourtant j'ai bien suivi le tuto :
<f:view>
<pou:selectOneMenu value="#{Recherche_Technicien_DTO.nom_famille}" onchange="submit()" valueChangeListener="#{RechercheTechnicienControleur.valueChangeMethod(e)}" styleClass="combo1">
<f:selectItems value="#{Famille_BDD.nom_familles}"/>
</pou:selectOneMenu>
</f:view>


Classe contenant le listener :
public class Recherche_Technicien_Controleur {
    
    //Connexion à la base de données
    protected static final Connection connV2 = ConnectionBDDV2.getInstance();
    
    //Attribut du bean pour creation Technicien
    private Recherche_Technicien_DTO rechercheTecnicienDTO ;
    
    public Recherche_Technicien_Controleur(){
        
    }
    
    public void ValueChangeMethod(ValueChangeEvent e){
        System.out.println("Test listener");
    }


Une chose m'interpelle : Quand je mets l'attribut valueChangeListener et que j'indique la méthode à appliquer, il prend l'argument de la méthode automatique valueChangeMethod(e), est ce normal ?

Merci
  • Partager sur Facebook
  • Partager sur Twitter