Spring: formulaire

Fermé
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - Modifié le 6 juin 2021 à 10:46
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - 9 juin 2021 à 15:18
Bonjour, je suis en train de mettre en place un formulaire sur la page /form mais lorsque celui-ci est soumis, j'ai l'erreur suivante:
Caused by: org.attoparser.ParseException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "form" - line 14, col 35)
ce qui concerne cette partie du code
th:field="*{author}"


Comment puis-je résoudre ce problème ?

Les controlleurs:
package com.example.demo5total.controller;

import com.example.demo5total.model.Message;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class GeneralController {

    @GetMapping("/form")
    public String index(Model model){

        model.addAttribute("newmsg",new Message());

        return "form";
    }

    @PostMapping("/form")
    public String postForm(Model model, @ModelAttribute Message message){

        model.addAttribute("msg", message);

        return "form";
    }


}


Le formulaire:
<!DOCTYPE html>
<html lang="en"
    xmlns:th="https://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

  <h4>form</h4>

  <form action="#" th:action="@{/index}" th:object="${newmsg}" th:method="post">

    <p>Author: <input type="text" th:field="*{author}" /></p>
    <p>Content: <input type="text" th:field="*{content}" /></p>

    <input type="submit" value="send!"/>

  </form>



</body>
</html>


Classe Message:
package com.example.demo5total.model;


public class Message {

    private Integer id;
    private String author;
    private String content;

    public Message(){
    }

    public Integer getId(){
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getAuthor(){
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getContent(){
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

A voir également:

1 réponse

charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
Modifié le 9 juin 2021 à 15:29
Apparemment il fallait que:
- je supprime
th:field="*{author}"
et à la place, que j'ajoute name="author" (au même endroit, dans la même balise)

- j'ai aussi dû ajouter
@RequestParam (name="author") String author
au sein des paramètres de ma route qui gère le formulaire en POST, pour que le champ du formulaire puisse être récupéré. (donc à faire avec tous les champs du formulaire que l'on veut récupérer, sans oublier de traiter les paramètres à l'intérieur de la méthode)

Depuis, ça marche.
0