IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Web Java Discussion :

[Spring MVC] Récupération des attributs d'un SimpleformController


Sujet :

Spring Web Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 42
    Points : 41
    Points
    41
    Par défaut [Spring MVC] Récupération des attributs d'un SimpleformController
    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
    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()));
     }	
    }
    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
     
    <c:forEach var="dossier" items="${lotForm.listeDossiers}" varStatus="rowCounter">
    <tr>
     <td id="${rowStyle}">
    	${dossier.noDossier}&nbsp;
     </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>
    La JSP est bien contruite, les listes déroulantes on bien la bonne valeur en selected.
    Lors que je submit mon form j'ai l'erreur suivante :
    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)
    ...
    En debuggant je me suis aperçu qu'a la soumission du form je faisais un new LotForm().
    Je me suis donc dis que mon form était perdu dans la session donc j'ai essayé de surcharger la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    protected Object formBackingObject(HttpServletRequest request)
    			throws Exception
    avec le même code que mon referenceData afin de reconstruire un form avec ma liste de dossier.
    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

  2. #2
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Je rencontre exactement le même problème !!!

    As-tu réussi à le résoudre ou bien à le contourner ?

    Ou quelqu'un aurait-il une solution ?

    Par avance, Merci !!!

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    Salut,

    Je ne sais pas si on peut dire que j'ai résolu mon problème mais je m'en suis sorti.

    A priori le problème venait du fait que ma structure etait trop complexe.

    J'avais une Liste d'Object1 ayant eux même des attributs d'Object2.
    J'ai créer un editor (au sens SPring MVC) sur mon Object1 et ça a marché. J'ai pas vraiment de solution miracle et je n'ai pas mon source sous les yeux pour m'expliquer mieux et/ou avec exemple.

    Peux tu détailler ton problème (Form / Controller / JSP / message d'erreur)

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour et merci de ta réponse !!

    J'ai finalement corrigé mon problème en suivant ce qui est écrit ici :
    http://mattfleming.com/node/134

    En clair :

    J'ai un objet PartenaireView qui represente un partenaire et un liste de controles rattachés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class PartenairesView implements Serializable{
     
    	public Partenaires partenaire;
     
    	public List<ControlesPartenairesView> controlesPartenaires;
     
    }
    J'affichait la liste de ma partenairesView, mais dès que je validais mon formulaire, j'avais la fameuse erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invalid property 'controlesPartenaires[0]' of bean class [mon.package.MaClasse]: Cannot access indexed value of property referenced in indexed property path 'controlesPartenaires[0]': returned null
    J'avais déjà dû, pour une autre page de mon application initialiser les champs de mon partenairesView dans le constucteur (sans arguments).

    J'avais essayé d'instancier ma liste à vide mais j'avais alors une OutOfBoundException

    Donc au final la solution est le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public PartenairesView() {
    		this.partenaire = new Partenaires();
    		this.controlesPartenaires = LazyList.decorate(new ArrayList<ControlesPartenairesView>(), FactoryUtils.instantiateFactory(ControlesPartenairesView.class));
     
    	}
     
    	public PartenairesView(Partenaires partenaire, List<ControlesPartenairesView> controlesPartenaires) {
    		this.partenaire = partenaire;
    		this.controlesPartenaires = controlesPartenaires;
    	}
    Voilà !

    J'espère avoi été assez clair et que ce post aidera d'autres personnes...

    Encore merci !!!

Discussions similaires

  1. [Spring WEBFLOW] Récupération des attributs
    Par cameleon2002 dans le forum Spring Web
    Réponses: 1
    Dernier message: 18/03/2008, 11h02
  2. [DOM XML] Récupération des attributs dans un flux xml
    Par opeo dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 11/04/2007, 17h35
  3. Réponses: 1
    Dernier message: 12/02/2007, 12h43
  4. [Spring MVC] Récupérer des valeurs de formulaires sur n pages
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2006, 07h23
  5. Réponses: 4
    Dernier message: 26/04/2005, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo