Bonjour,
après de nombreuses recherches, de nombreux essais infructueux, je me décide à vous faire part de mon problème qui m'apparait aujourd'hui comme un problème insolvable.
Le problème est simple : lorsque je soumets à mon action un action form contenant une collection de beans, les données saisies ne sont pas envoyées (ou retrouvées ??)...
Le code de ma page jsp :
Le code html de la page générée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <logic:iterate name="reserve_perf_form" property="reservations" id="reservation" indexId="index"> <div> <label>Catégorie <bean:write property="category" name="reservation"/> : </label> <html:text name="reservation" indexed="true" property="number" size="6" /> places <html:hidden property="category" name="reservation" indexed="true" /> </div> </logic:iterate>
L'ActionForm :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <div> <label>Catégorie B : </label> <input type="text" name="reservation[0].number" size="6" value="0"> places <input type="hidden" name="reservation[0].category" value="B"> </div> <div> <label>Catégorie A : </label> <input type="text" name="reservation[1].number" size="6" value="0"> places <input type="hidden" name="reservation[1].category" value="A"> </div>
L'Action :
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 public final class ReservePerformance extends ActionForm { private static final long serialVersionUID = 1L; private List reservations = new ArrayList(); public ReservePerformance(){ this.reservations.add(0, new Reservation("A",0)); this.reservations.add(0, new Reservation("B",0)); } // NB : Cette méthode n'est jamais appelée pourquoi ? public void setReservation(int key, Object value) { System.out.println("Set reservation"); reservations.set(key, value); } // Methode jamais appellé, pourquoi ? public Reservation getReservation(int key) { System.out.println("Get reservation"); return (Reservation) reservations.get(key); } public List getReservations() { System.out.println("Get reservationS"); return reservations; } public void setReservations(List reservations) { System.out.println("Set reservationS"); this.reservations = reservations; } }
Et enfin, les lignes intéressantes de mon fichier de config struts-config.xml :
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 public class DoReservePerformance extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ReservePerformance form_r = (ReservePerformance) form; System.out.println("form_r : "+form_r); ArrayList<Reservation> reserv = (ArrayList<Reservation>) form_r.getReservation(0); System.out.println(reserv.size()); int length = reserv.size(); String valeur = "Reservation effectuée pour"; for(int i=0;i<length;i++){ valeur = valeur + "<br/>"+ reserv.get(i).getCategory()+":"+reserv.get(i).getNumber(); } // Les valeurs affichées sont toujours les mêmes que celles initialisées dans l'action form // Write the text to response response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(valeur); out.flush(); return null; } }
Si qqn pouvait me sortir de ce probleme très très facheux, je lui en serais très reconnaissant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <form-bean name="reserve_perf_form" type="com.alpesbillets.struts.forms.ReservePerformance"> </form-bean> <action path="/do_reserve_performance" input="/views/reserve_perf.jsp" type="com.alpesbillets.struts.actions.DoReservePerformance" name="reserve_perf_form" validate="true" scope="request" />
Partager