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 Java Discussion :

NullValueInNestedPathException lors de la soumission de mon formulaire


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut NullValueInNestedPathException lors de la soumission de mon formulaire
    Hello !

    2 jours maintenant que je bloque sur une erreur, et je n'ai pas l'ombre d'une piste.

    Lorsque je soumets mon formulaire web, je me retrouve avec l'erreur :
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'team.responsibilitiesList[0]'
    [...]
    Cause mère :
    org.springframework.beans.NullValueInNestedPathException: Invalid property 'team.responsibilitiesList' of bean class [mon.package.bo.project.TeamCommand]: Could not instantiate property type [mon.package.bo.project.EnumProjectResponsibility] to auto-grow nested property path: java.lang.InstantiationException: mon.package.bo.project.EnumProjectResponsibility
    Voici les lignes qui semble-t-il me posent problème. Lorsque je les commente, je n'ai plus l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <fieldset>
         <legend>Responsibilities</legend>
              <table>
                   <c:forEach items="${team_cmd.team.responsibilitiesList}" var="responsibility" varStatus="responsibilityStatus">
                        <form:hidden path="team.responsibilitiesList[${responsibilityStatus.index}].value"/>
                             <tr>
                                  <td>
                                       <span class="input">${responsibility.name}</span>
                                       <input type="button" value="X">
                                  </td>
                             </tr>
                   </c:forEach>
              </table>
    </fieldset>
    Je veux afficher la liste des responsabilités de l'équipe. responsibilitiesList est une collection d'enums.
    Voici le BO Team :
    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
    public class Team implements Serializable {
     
         private static final long serialVersionUID = -8809564093412284994L;
         private int id = 0;
         private Project project = null;
         private User manager = null;
         private String name = "";
         private List<EnumProjectResponsibility> responsibilitiesList = 
              new AutoPopulatingList<EnumProjectResponsibility>(EnumProjectResponsibility.class);
     
         public Team() {
              super();
         }
     
         // GETTERS, SETTERS
         // ...
     
         public List<EnumProjectResponsibility> getResponsibilitiesList() {
              return responsibilitiesList;
         }
     
         public void setResponsibilitiesList(
                   List<EnumProjectResponsibility> responsibilitiesList) {
              this.responsibilitiesList = responsibilitiesList;
         }
     
         // ...
    }
    D'après ce que je comprends, il y a un problème lors du bind entre le formulaire et le controller... Mais comment le résoudre ???

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Le StackStrace de l'exception affiche plusieurs beans mais tu nous as montré qu'un seul. Bref le plus simple pour toi serait d'initialiser tous les beans qui ne sont pas du type primitive, en fait l'exception veut que Spring ne trouve pas la valeur par défaut de ton bean et comme il ne sait pas comment afficher un bean lorsque celui-ci à la valeur nulle donc erreur. Une autre solution serait de d'utiliser un PropertyEditorSupport afin de définir la conversion en String de chacun de tes bean puis utiliser @InitBinder pour les déclarer dans ton controller, ou encore de valider tes bean avec un Validator ou BindingResult avant chaque traitement mais c'est à toi de voir ce qui est simple de compréhension pour toi.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    WebDataBinder a une méthode setAutoGrowNestedPaths(boolean).

    vous pouvez l'invoquer dans une méthode annotée @InitBinder et prenant le WebDataBinder en paramètre.

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/04/2013, 18h14
  2. Réponses: 4
    Dernier message: 30/05/2012, 11h01
  3. Problème Combobox lors de l'ouverture de mon formulaire
    Par tiny23 dans le forum Visual Studio
    Réponses: 4
    Dernier message: 28/03/2011, 11h14
  4. [MySQL] problème lors de l'envoi de mon formulaire
    Par cdevl32 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/03/2009, 19h19
  5. Erreur 404 lors de la soumission d'un formulaire
    Par brunodim dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2007, 17h34

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