Bonjour, pour mettre une liste déroulante, j'ai suit le tuto de c_nvy :
Mon but est d'afficher un liste déroulante contenant les nom des services que j'ai dans ma base, et stocker derière les idService, que j'aurais besoin dans ma tables ressources ou le idService est une clé etrangère dans cette table, pour cela :
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 Un tag html:select doit être dans un tag html:form afin de pouvoir récupérer le (ou les) éléments sélectés dans la liste déroulante. Struts utilisant par défaut le form-bean référencé dans le mapping de l'Action via l'attribut name, il n'est pas utile de coder l'attribut name="nomDuFormBean" dans le tag html:select. Dans l'attribut property du tag html:select, il faut spécifier le nom de la propriété qui contiendra la (ou les) valeur(s) sélectée(s). sélection simple : Code : <html:select property="selectedItem">=> la propriété selectedItem doit être définie dans l'ActionForm avec getter et setter et doit être de type String. sélection multiple : Code : <html:select property="selectedItems" multiple="true">=> la propriété selectedItems doit être définie dans l'ActionForm avec getter et setter et doit être de type String[]. Pour afficher les options de la liste déroulante, il y a plusieurs possibilités : Dans le cas où la collection a été mise dans le scope via un setAttribute, elle doit être référencée dans le tag html:options ou html:optionsCollection via l'attribut name. S'il s'agit d'un tableau de String ou d'Integer, d'une collection de String ou d'Integer, il suffit de coder ceci : Code : <html:select property="selectedItem"> <html:options name="uneCollection"/> </html:select>S'il s'agit d'une collection dobjets ayant pour propriétés id et libelle : Code : <html:select property="selectedItem"> <html:options collection="uneCollection" property="id" labelProperty="libelle"/> </html:select>ou Code : <html:select property="selectedItem"> <html:optionsCollection name="uneCollection" value="id" label="libelle"/> </html:select>la propriété id spécifiée dans l'attribut property correspond à la valeur renvoyée si celle-ci est sélectée et la propriété libelle spécifiée dans l'attribut labelProperty est le label qui s'affiche dans la liste déroulante. Dans le cas où la collection est une propriété de l'ActionForm et que celle-ci est initialisée via le setter de l'ActionForm dans une Action qui s'exécute avant l'affichage du formulaire, elle doit être référencée dans le tag html:options ou html:optionsCollection via l'attribut property. S'il s'agit d'un tableau de String ou d'Integer, d'une collection de String ou d'Integer, il suffit de coder ceci : Code : <html:select property="selectedItem"> <html:options property="uneCollection"/> </html:select>S'il s'agit d'une collection dobjets ayant pour propriétés id et libelle : Code : <html:select property="selectedItem"> <html:optionsCollection property="uneCollection" value="id" label="libelle"/> </html:select>S'il s'agit d'une collection de LabelValueBean, celui-ci ayant pour propriété value et label, il n'est pas utile de coder les attributs value et label dans le tag html:optionsCollection : Code : <html:select property="selectedItem"> <html:optionsCollection property="uneCollection"/> </html:select> Si on veut sélectionner par défaut un élément de la liste déroulante, il suffit d'initialiser la propriété correspondante de l'ActionForm dans l'Action qui s'exécute avant l'affichage du formulaire via le code suivant : Code : UneActionForm uneActionForm=(UneActionForm) form ; uneActionForm.setSelectedItem(variableContenantLaValeurParDefaut) ;Ceci implique que le form-bean soit référencé via l'attribut name dans le mapping de cette Action dans le struts-config.xml. Dans le cas où la valeur par défaut est fixe, il est possible d'initialiser la propriété selectedItem dans la méthode reset() dans le cas dune ActionForm, ou dans lattribut initial de la balise form-property dans le cas dune DynaActionForm.
j'ai mis dans le mon form :
Dans mon métier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part private String selectedItem;
et dans mon action :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public List getServiceItem(){ Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); return session.createQuery("select nomService from Service where active like true").list(); }
Dans ma page jsp :
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 List ServiceItem; List RessourceItem; public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { CongesForm cgf = (CongesForm)form; GestConge gcg= new GestConge(); GestService gsv = new GestService(); ServiceItem = gsv.getServiceItem(); request.setAttribute("servitem", ServiceItem); RessourceItem = gcg.getRessConge(); request.setAttribute("ressitem", RessourceItem);Dans ce cas il m'affiche les nom du service,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <tr><td width="30%">Service :</td> <td> <html:select property="selectedItem"> <html:options name="servitem"/> </html:select><br/> </td></tr>
mais lorsque je met dans ma requete :
et dans ma page jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public List getServiceItem(){ Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); return session.createQuery("select nomService,idService from Service where active like true").list(); }
il m'affiche des erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <tr><td width="30%">Service :</td> <td> <html:select property="selectedItem" value="idService"> <html:options name="servitem" labelProperty="nomService"/> </html:select><br/> </td></tr>
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 08:51:18,734 ERROR [action]:253 - "Servlet.service()" pour la servlet action a généré une exception javax.servlet.jsp.JspException: ServletException in '/vues/AjoutConge.jsp': No getter method available for property nomService for bean under name null at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:923) at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462) at org.apache.jsp.vues.template.mainLayout_jsp._jspx_meth_tiles_insert_1(mainLayout_jsp.java:199) at org.apache.jsp.vues.template.mainLayout_jsp._jspService(mainLayout_jsp.java:127) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063) at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263) at org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:302) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source)
Partager