Bonjour,
j'ai une liste déroulante que je veux remplir via une requête HQL .est ce que quelqu'un a une idée là dessus,merci
Version imprimable
Bonjour,
j'ai une liste déroulante que je veux remplir via une requête HQL .est ce que quelqu'un a une idée là dessus,merci
Il faut que tu relie ton selectOneMenu à une propriété List de ton Bean. Il faut ensuite que tu ensuite que tu remplisse cette propriété avec les éléments retourné par ta requête.
Si tu n'y arrive pas montre nous ton code et dis nous quelle est la partie qui te bloque.
voilà la méthode qui retourne uneliste d'enregistrement :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public List getmaliste() { List unelist = new ArrayList(); try { org.hibernate.Session session = HibernateUtil.currentSession(); //org.hibernate.Transaction tx = session.beginTransaction(); org.hibernate.Query q = session.createQuery("from Matable"); unelist= q.list(); //session.close(); } catch (Exception e) { e.printStackTrace(); } return unelist; }
et pour la liste déroulante :
Code:
1
2
3
4
5 <h:selectOneMenu id="MonMenu" value="#{bean.maliste}" > </h:selectOneMenu>
D'après ton code il faudrait que tu ai plutôt ça
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public List<SelectItem> getMaliste() { List<SelectItem> unelist = new ArrayList <SelectItem>(); try { org.hibernate.Session session = HibernateUtil.currentSession(); //org.hibernate.Transaction tx = session.beginTransaction(); org.hibernate.Query q = session.createQuery("from Matable"); Iterator it = q.list().iterator(); while (it.hasNext()){ Matable elementCourant = it.next(); unelist.add(new SelectItem(elementCourant.getAttributCle(), elementCourant.getAttributValeur()); //session.close(); } } catch (Exception e) { e.printStackTrace(); } return unelist; }
Il faudra que tu ai dans ta classe un attribut valeurDeLaListe avec ces getter et setter qui prendra comme valeur la clé du SelectItem choisit dans la liste.Code:
1
2
3
4 <h:selectOneMenu id="MonMenu" value="#{bean.valeurDeLaListe}" > <f:selectItems value="#{bean.maliste}" /> </h:selectOneMenu>
Merci pour votre réponse,
mais j'ai compris la ligne
c quoi le type de la variable MAtableCode:
1
2 Matable elementCourant = it.next();
aussi pour la ligne
j'ai une erreur :Code:
1
2 List<SelectItem> unelist = new ArrayList()<SelectItem>;
< cannot be applied to java.util.arraylist,selectitem
d'après le code que tu as écris tu fais une requête hibernate sur un type d'objet maTable (que du doit normalement avoir mappé) donc la liste de résultat retournée est composée d'élément du type maTable.Code:
1
2 Matable elementCourant = it.next();
Il y as une erreur dans mon code la bonne syntaxe est :
j'édite mon message précédent.Code:
1
2 List<SelectItem> unelist = new ArrayList <SelectItem> ();
J'ai toujours des problèmes,
pour la ligne
j'ai l'erreur suivant :Incompatible typesCode:
1
2 Mtable elementCourant = it.next();
et pour la ligne
j'ai pas compris quelles sont les deux paramètres de SELECTItemCode:
1
2 unelist.add(new SelectItem(elementCourant.getAttributCle()),elementCourant.getAttributValeur());
merci
Pour ce qui est de ta première erreur il faut que tu caste le retour de ton iterateur
pour ce qui est du SelectItem je te renvoi vers la documentationCode:
1
2 Matable elementCourant = (Matable )it.next();
Dans mon cas je veux avoir la colonne des clés primaires des enregistrement de ma table,
puisque "code" est la clé primaire j'ai mis
mais toujours l'erreurCode:
1
2
3 unelist.add(new SelectItem(elementCourant.getCode()),elementCourant.getCode())
cannot find symbol
symbol:method add
C'est juste un problème de parenthésage
Code:
1
2 unelist.add(new SelectItem(elementCourant.getCode(),elementCourant.getCode()))
Oui ça marchait,merci infiniment guigui5931 :D
En faite j'ai réussi à remplir la liste,mais le problème est que je dois choisir une valeur et l'ajouter à une autre table que la table "matable"
normalement la valeur value du composant qui va me permettre de spécifier la table ou je vais mettre la valeur choisie,mais puisque value et j'ai déja utilisé ,donc comment je peux récupérer la valeur choisie et l'insérée dans une autre table.Code:
1
2
3
4 <h:selectOneMenu id="MonMenu" value="#{matable.code}" style="width:100%"> <f:selectItems value="#{matable.uneliste}" /> </h:selectOneMenu>
Je ne comprend pas trop ce que tu veux faire mais si tu veux utiliser la valeur choisit dans la liste elle se trouve dans l'attribut code.
Je veux utiliser la valeur choisie dans la liste dans un autre Bean autre que celui ou se trouve l'attribut code
Je crois que j'ai pas bien expliqué mon problème,voilà :
D'abord je sais que la valeur choisie se trouve dans l'attribut code qui se trouve avec ses getters et setters dans un le Bean appelé matableBean,donc moi j'ai besoin d'utilisé la valeur choisie dans un autre bean appelé MonBean .
Merci énormément guigui5931 ,c bon le problème est résolu :yaisse2:
Dans ce cas tu peux regarder autour du tag updateActionListener qui sert à faire passer des valeurs d'un bean à un autre.
EDIT : tant mieux alors
bonjour, j'essaie aussi de remplir un selectOnemenu à partir de ma BD -la même chose que ce topic-. j'ai un peu suivi ce qui a été posté ici, sauf que j'ai 2 pb au tout début pour créer ma fonction dans mon bean
sauf ke g 2 erreur au niveau des lignes en rouge :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public List<SelectItem> getMaliste(){ List<SelectItem> unelist = new ArrayList <SelectItem>(); try{ Session session=utils.HibernateSessionFactory.getSession(); Query q = session.createQuery("from Restaurant"); Iterator it = (Iterator)q.list().iterator(); while (it.hasNext()){ Restaurant elementCourant = (Restaurant)it.next(); unelist.add(new SelectItem(elementCourant.getCodeResto(), elementCourant.getLibelleResto())); } }catch (Exception e) { e.printStackTrace(); } return unelist; }
- déjà la méthode hasNext n'est pas reconnu, g pense que c'est un pb de biblio. pr iterator la biblio importé est : import javax.swing.text.html.HTMLDocument.Iterator;
- même avec le cast pour le it g l'erreur : cannot cast from void to Restaurant
merci bcp
non le Iterator à importer est java.util.Iterator;
Cependant si tu veux continuer cette discussion ouvre un nouveau topic.