Bonjour, je fais mes premiers pas avec SPRING MVC et je bloque depuis quelques jours sur un problème "bénin". Disons qu'avec Struts je n'ai pas de soucis mais là je sèche.
Pour information, nous utilisons aussi Hibernate. Les frameworks ont été mis en place par des prestataires, je ne connais donc rien à la configuration de ces derniers mais j'ai accès si besoin au fichier.
Mon problème est le suivant :
J'ai un objet LOT qui contient une liste de DOSSIER
Un DOSSIER contient un SONDAGE qui a un ID et un LIBELLE
voici le code de mon referanceData() de mon controller
Ma JSP donne :
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 protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception { Map<String, Object> lists = new HashMap<String, Object>(); if (request.getParameter("idLot") != null) { final String idLot = request.getParameter("idLot"); Lot lot = getLotService().rechercherParId(Long.valueOf(idLot)); //initialisation du formulaire LotForm form = (LotForm)command; populateForm(form, lot); lists.put("lotForm", form); lists.put("list_Sondage", getListeSondageRestreintes()); } private void populateForm(LotForm form, Lot lot) { if (lot != null ) { form.setId(lot.getId()); form.setNom(lot.getNom()); form.setListeDossiers(new ArrayList<Dossier>(lot.getDossierTries())); } }
La JSP est bien contruite, les listes déroulantes on bien la bonne valeur en selected.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <c:forEach var="dossier" items="${lotForm.listeDossiers}" varStatus="rowCounter"> <tr> <td id="${rowStyle}"> ${dossier.noDossier} </td> <td id="${rowStyle}"> <form:select multiple="false" items="${list_Sondage}" itemValue="id" itemLabel="libelle" path="listeDossiers[${rowCounter.index}].sondageLot.id" /> </td> </tr> </c:forEach>
Lors que je submit mon form j'ai l'erreur suivante :
En debuggant je me suis aperçu qu'a la soumission du form je faisais un new LotForm().Invalid property 'listeDossiers[0]' of bean class [fr.omc.web.form.lot.LotForm]: Cannot access indexed value of property referenced in indexed property path 'listeDossiers[0]': returned null org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:557)
org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:451) org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:428)
org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:645) org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:78) org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:532) org.springframework.validation.DataBinder.doBind(DataBinder.java:434) org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:147) org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:108) org.springframework.web.servlet.mvc.BaseCommandController.bindAndValidate(BaseCommandController.java:391)
...
Je me suis donc dis que mon form était perdu dans la session donc j'ai essayé de surcharger la méthode
avec le même code que mon referenceData afin de reconstruire un form avec ma liste de dossier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 protected Object formBackingObject(HttpServletRequest request) throws Exception
De ce fait j'arrive à aller dans mon onSubmit mais les valeurs des sondages que je trouve dans mon form ne sont pas celle attendu.
Avec vous des idées notamment concernant la gestion du form en session? ou comme avec Spring mvc manipuler des des liste de bean contenu dans un bean ?
Merci
Partager