Grosse énigme sur les propriétés indexées
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 :
Code:
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> |
Le code html de la page générée :
Code:
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'ActionForm :
Code:
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;
}
} |
L'Action :
Code:
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;
}
} |
Et enfin, les lignes intéressantes de mon fichier de config struts-config.xml :
Code:
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" /> |
Si qqn pouvait me sortir de ce probleme très très facheux, je lui en serais très reconnaissant.