Bonsoir à tous,
Je suis en train de développer une application, dans celle-ci, j'ai trois listes déroulantes.
Le choix de la première doit incrémenter la seconde et de même pour la troisième.
J'ai décidé d'utiliserproposé par la librairie PrimeFaces.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <pou:Ajax />
Globalement cela fonctionne bien, mais je n'arrive pas à faire en sorte que sur changement du choix de la première liste, toutes les autres se remettent à jour.
De plus, parfois ce n'est pas instantanée la mise à jour sur un choix, il faut cliquer plusieurs fois, voir insister, existe il une astuce pour cela ?
Les trois listes déroulantes :
La classe java contenant les méthodes pour les incrémenter :
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 <pou:panel id="specialitePanel" header="Choix de la spécialité" styleClass="specialitePanel"> <div id="famille"> <h1 class="sousItem">Famille :</h1> <f:view> <pou:selectOneMenu id="choixFamille" value="#{Recherche_Technicien_DTO.nom_famille}" styleClass="combo1"> <f:selectItems value="#{Famille_BDD.nom_familles}"/> <pou:ajax listener="#{Recherche_Technicien_DTO.choixCombo}" rendered="choixMarque" update="choixMarque"/> </pou:selectOneMenu> </f:view> </div> <div id="marque"> <h1 class="sousItem">Marque :</h1> <f:view> <pou:selectOneMenu id="choixMarque" value="#{Recherche_Technicien_DTO.nom_marque}" styleClass="combo1"> <f:selectItems value="#{Recherche_Technicien_DTO.marqueItem}"/> <pou:ajax listener="#{Recherche_Technicien_DTO.choixComboProduits()}" rendered="choixSpecialite" update="choixSpecialite"/> </pou:selectOneMenu> </f:view> </div> <div id="specialite"> <h1 class="sousItem">Produit :</h1> <f:view> <pou:selectOneMenu id="choixSpecialite" value="#{Recherche_Technicien_DTO.nom_specialite}" styleClass="combo1"> <f:selectItems value="#{Recherche_Technicien_DTO.specialiteItem}"/> </pou:selectOneMenu> </f:view> </div> </pou:panel>
Cette classe étant "serializable"
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 //Listener chargement combo public void choixCombo(){ // Nom de la famille sélectionné System.out.println("Famille sélectionnée : "+nom_famille); //Requete SQL pour récupérer codre_produit selon famille String marqueSQL = "select code_famille FROM famille WHERE libelle='" + nom_famille + "'"; try{ Statement state = this.connV2.createStatement(); ResultSet rs = state.executeQuery(marqueSQL); rs.next(); String CodeFamille = rs.getString(1); rs.close(); //Etape 2 : recuperation du libelle du produit selon le code produit String marqueSQL2 = "SELECT libelle FROM produit WHERE code_famille=" + CodeFamille; //Execution de la requete rs = state.executeQuery(marqueSQL2); setMarqueItem(new ArrayList<SelectItem>()); cpt = 0; while (rs.next()) { getMarqueItem().add(cpt, new SelectItem(rs.getString(1))); ++cpt; } rs.close(); for(SelectItem item : marqueItem){ System.out.println("Nom des marques : "+item.toString()); } }catch(Exception e1){ System.out.println("Erreur remplissage combo marque : "+e1.getMessage()); } } //Listener chargement combo produits public void choixComboProduits() { //Nom de la marque System.out.println("Marque sélectionnée : " + nom_marque); //Requete SQL pour récupérer le code_produit de la marque String produitSQl = "select code_produit FROM produit WHERE libelle='" + nom_marque + "'"; try { Statement state = this.connV2.createStatement(); ResultSet rs = state.executeQuery(produitSQl); rs.next(); String CodeMarque = rs.getString(1); //Une fois le resultat traite on ferme pour relancer la seconde partie de la requete rs.close(); //On recup�re le libelle selon le code famille String produitSQL2 = "SELECT nom_technique FROM technique WHERE code_produit='" + CodeMarque + "'"; //Execution de la requete rs = state.executeQuery(produitSQL2); cpt = 0; specialiteItem = new ArrayList<SelectItem>(); while (rs.next()) { specialiteItem.add(cpt,new SelectItem(rs.getString(1))); ++cpt; } rs.close(); for(SelectItem item : specialiteItem){ System.out.println("Nom des specialites : "+item.toString()); } } catch (Exception e) { System.out.println("Erreur remplissage spéclialité : " + e.getMessage()); } }
Le faces-config.xml :
Merci de votre aide
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 <?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd" version="2.1"> <!--Declaration des Domaines --> <managed-bean> <managed-bean-name>Technicien</managed-bean-name> <managed-bean-class>Domaines.Technicien</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>Responsable</managed-bean-name> <managed-bean-class>Domaines.Responsable</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <!--Declaration des DTO --> <managed-bean> <managed-bean-name>TechnicienDTO</managed-bean-name> <managed-bean-class>DTO.Technicien_DTO</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>Recherche_Technicien_DTO</managed-bean-name> <managed-bean-class>DTO.Recherche_Technicien_DTO</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <!--Declaration des Controleurs --> <!-- Controleur Ajout_Technicien --> <managed-bean> <managed-bean-name>AjoutTechnicienControleur</managed-bean-name> <managed-bean-class>Controleurs.Ajout_Technicien_Controleur</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>TechnicienDTO</property-name> <property-class>DTO.Technicien_DTO</property-class> <value>#{technicienDTO}</value> </managed-property> </managed-bean> <!-- Controleur Recherche_Technicien --> <managed-bean> <managed-bean-name>RechercheTechnicienControleur</managed-bean-name> <managed-bean-class>Controleurs.Recherche_Technicien_Controleur</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>Recherche_Technicien_DTO</property-name> <property-class>DTO.Recherche_Technicien_DTO</property-class> <value>#{rechercheTechnicienDTO}</value> </managed-property> </managed-bean> <!--Declaration des listes --> <!-- Liste des Techniques--> <managed-bean> <managed-bean-name>TechniqueBDD</managed-bean-name> <managed-bean-class>BDD.Technique_BDD</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <!-- Liste des Localisations--> <managed-bean> <managed-bean-name>Localisation_BDD</managed-bean-name> <managed-bean-class>BDD.Localisation_BDD</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <!-- Liste des Domaines--> <managed-bean> <managed-bean-name>Domaine_BDD</managed-bean-name> <managed-bean-class>BDD.Domaine_BDD</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <!-- Liste des Responsables--> <managed-bean> <managed-bean-name>Responsable_BDD</managed-bean-name> <managed-bean-class>BDD.Responsable_BDD</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <!-- Liste des Familles--> <managed-bean> <managed-bean-name>Famille_BDD</managed-bean-name> <managed-bean-class>BDD.Famille_BDD</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> </faces-config>
Fred
Partager