2017-08-09 7 views
1

Je souhaite soumettre tous les champs de texte et les radiobuttons de mes champs de saisie en tant que ArrayList et les analyser au niveau du contrôleur, mais je ne sais pas vraiment comment.Analyser les champs de saisie en tant que liste de tableaux au contrôleur via @RequestMapping

Toute aide est vraiment appréciée.

Voici ce que j'ai essayé jusqu'à présent:

@RequestMapping(value = "/formdata", method = RequestMethod.POST) 
    public String formdata(HttpServletRequest req, @AuthenticationPrincipal User currentUser, @ModelAttribute RegDatas regDatas, Model model) { 
//get values as regDatas[0]? 
} 

Voici mon formulaire HTML:

<form method="post" th:action="@{/formdata}" th:object="${regDatas}"> 
    <div class="col-sm-4"> 
     <input th:field="*{regDatas[0].gender}" type="radio" value="MALE" name="gender" disabled="disabled" /><span>Mr</span> 
     <input th:field="*{regDatas[0].gender}" type="radio" value="FEMALE" name="gender" disabled="disabled"/><span>Frau</span> 
     <p>Firstname:</p><input required="required" type="text" th:field="*{regDatas[0].firstname}" placeholder="Max" disabled="disabled" /> 
    </div> 
    <div class="col-sm-4"> 
     <input th:field="*{regDatas[1].gender}" type="radio" value="MALE" name="gender" disabled="disabled" /><span>Mr</span> 
     <input th:field="*{regDatas[1].gender}" type="radio" value="FEMALE" name="gender" disabled="disabled"/><span>Frau</span> 
     <p>Firstname:</p><input required="required" type="text" th:field="*{regDatas[1].firstname}" placeholder="Max" disabled="disabled" /> 

         <button type="submit">Speichern</button> 

    </div> 

</form> 

Ma classe d'emballage:

public class RegDatas { 

    private List<RegData> regDatas; 

    public List<RegData> getRegDatas() { 
     return regDatas; 
    } 

    public void setRegDatas(List<RegData> regDatas) { 
     this.regDatas = regDatas; 
    } 

} 

Ma classe pour stocker des valeurs:

public class RegData { 
    private String email; 
    private String firstname; 
    private Gender gender; 

    public String getEmail() {return email;} 

    public void setEmail(String email) {this.email = email;} 

    public String getFirstname() {return firstname;} 

    public void setFirstname(String firstname) {this.firstname = firstname;} 

    public Gender getGender(){ return gender; } 

    public void setGender(Gender gender){ this.gender = gender; } 

} 

C'est l'erreur que je vois si je lance comme ça:

org.springframework.beans.NotReadablePropertyException: Invalid property 'RegDatas[0]' of bean class [de.ciss.aag.model.domain.RegData]: Bean property 'RegDatas[0]' is not readable or has an invalid getter method 
+0

Sur la valeur nominale, cela semble devoir fonctionner. Quel problème voyez-vous? Que contient la variable 'regDatas' dans votre contrôleur lorsque vous faites le POST? – DaveyDaveDave

+0

J'obtiens cette erreur org.springframework.beans.NotReadablePropertyException: Propriété non valide 'RegDatas [0]' de la classe bean [de.ciss.aag.model.domain.RegData]: La propriété Bean 'RegDatas [0]' n'est pas lisible ou a une méthode de getter invalide – pepote

+0

Quand vois-tu l'erreur? Est-ce lorsque vous soumettez le formulaire ou lorsque vous chargez la page au départ? Avez-vous quelque chose qui remplit votre classe de modèle? Y a-t-il quelque chose dans votre liste 'RegDatas.regDatas' quand la page se charge? – DaveyDaveDave

Répondre

0

De vos commentaires, je pense que le problème est que votre modèle n'est pas remplie avec un objet RegDatas. Cette Baeldung tutorial - Getting Started with Forms in Spring MVC, en particulier l'article 4 est probablement une bonne ressource, si vous ne l'avez pas déjà vu, mais je pense que vous avez besoin de quelque chose comme ça (du tutoriel) dans votre contrôleur:

@RequestMapping(value = "/employee", method = RequestMethod.GET) 
public ModelAndView showForm() { 
    return new ModelAndView("employeeHome", "employee", new Employee()); 
} 

Mais vous aurez besoin pour ajouter une instance peuplée RegDatas à votre modèle, au lieu de l'employé, donc un exemple très basique, cela semble fonctionner pour moi, avec votre code. Il existe d'autres façons de peupler le modèle, que je recommanderais de rechercher, mais c'est probablement le plus simple.

@RequestMapping("/your-page-endpoint") 
public ModelAndView get() { 
    return new ModelAndView("your-view-name", "regDatas", new RegDatas()); 
} 
+0

Merci pour votre réponse rapide! Je pense que je l'ai eu .. sauriez-vous peut-être comment accéder aux données stockées à partir du contrôleur? – pepote