Renvoyer une donnée thymeleaf vers un controlleur

Fermé
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024 - 13 juin 2022 à 17:59
Lumberjack33 Messages postés 8 Date d'inscription samedi 31 décembre 2022 Statut Membre Dernière intervention 31 décembre 2022 - 31 déc. 2022 à 12:51
Bonjour,

j'essaye de faire une application web qui utilise:
SpringBoot
Mysql
JDBC
Design pattern: MVC, DAO
Thymeleaf
Et IntelliJ

J'ai une de mes vues qui affiche le contenu d'un de mes tables:

Mon controlleur utilise pour cela la méthode suivante:

@GetMapping("/userOnly/MyInjections")
    public String MyInjections(Model model){
        int id=this.getUserId();
        List <Injection> myInj = injDAO.getAllInjFromIdDia(id);
        model.addAttribute("myInj",myInj);
       return "userOnly/MyInjections";
    }


et j'utilise ensuite thymeleaf pour afficher tous cela dans une vue :

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
    <div th:replace="header :: myheader"></div>
    <title>My Injections</title>
</head>
<body>
<div th:replace="userOnly/navbar :: nav"></div>
<div class="container d-flex flex-column min-vh-100 justify-content-center align-items-center">
    <div class="row mt-5 mb-3" >
        <h3>My injections</h3>

            <table class="table table-striped">
                <thead>
                <tr>
                    <th>Date</th>
                    <th>Day</th>
                    <th>Wake up Test</th>
                    <th>Morning Dose</th>
                    <th>Morning Test</th>
                    <th>Midday Test</th>
                    <th>Midday Dose</th>
                    <th>Afternoon Test</th>
                    <th>Supper Test</th>
                    <th>Supper Dose</th>
                    <th>Evening Test</th>
                    <th>Sleep Test</th>
                    <th>Sleep Dose</th>
                    <th>Night Test</th>
                    <th>Further Information</th>
                    <th>Delete </th>
                </tr>
                </thead>
                <tbody>
                <tr th:each="Inj: ${myInj}">
                    <td th:text="${Inj.date}">  </td>
                    <td th:text="${Inj.day}"></td>
                    <td th:text="${Inj.wakeupTest}"></td>
                    <td th:text="${Inj.morningDose}"></td>
                    <td th:text="${Inj.morningTest}"></td>
                    <td th:text="${Inj.middayTest}"></td>
                    <td th:text="${Inj.middayDose}"></td>
                    <td th:text="${Inj.afternoonTest}"></td>
                    <td th:text="${Inj.supperTest}"></td>
                    <td th:text="${Inj.supperDose}"></td>
                    <td th:text="${Inj.eveningTest}"></td>
                    <td th:text="${Inj.sleepTest}"></td>
                    <td th:text="${Inj.sleepDose}"></td>
                    <td th:text="${Inj.nightTest}"></td>
                    <td th:text="${Inj.comment}"></td>
                    <td>
                        <form th:action="@{/delInj}" th:object="${InjForm}" method="post">
                            <input type="hidden" id="id_injection" name="InjForm.id_injection" value="${Inj.id_injection}">
                            <input class="btn btn-danger" type="submit" value="Submit">
                        </form>
                    </td>

                </tr>
                </tbody>
            </table>

    </div>

</div>
</body>
</html>

Je voudrai créé un bouton "delete "qui renvoie le contenu de "${Inj.id_injection}" vers le controlleur pour pouvoir récuperer l'id du champ a supprimer mais je ne trouve pas comment faire
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
13 juin 2022 à 19:19
Bonjour,

Essaye de faire une recherche avec les mots-clés "SpringBoot Thymeleaf CRUD".
Un exemple avec une entité User : https://www.baeldung.com/spring-boot-crud-thymeleaf
0
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024
13 juin 2022 à 20:17
Merci d'avoir répondu :)
J'ai déjà fait des recherches mais la plupart des exemples trouvés (comme celui-ci d'ailleurs) utilise JPA et des ORM (ici Hibernate) contrairement a mon projet.
0
Lumberjack33 Messages postés 8 Date d'inscription samedi 31 décembre 2022 Statut Membre Dernière intervention 31 décembre 2022
31 déc. 2022 à 12:51

our envoyer l'id de l'enregistrement à supprimer à votre controlleur, vous pouvez utiliser une balise <input> cachée. Vous pouvez définir la valeur de cette balise en utilisant la syntaxe th:value="${Inj.id_injection}", comme ceci:

<form th:action="@{/delInj}" th:object="${InjForm}" method="post">
    <input type="hidden" id="id_injection" name="InjForm.id_injection" th:value="${Inj.id_injection}">
    <input class="btn btn-danger" type="submit" value="Submit">
</form>
 

Lorsque l'utilisateur cliquera sur le bouton "Supprimer", la valeur de l'input caché sera envoyée à votre controlleur via la méthode POST. Vous pouvez alors récupérer cette valeur dans votre controlleur en utilisant l'annotation @ModelAttribute:

@PostMapping("/delInj")
public String deleteInjection(@ModelAttribute("InjForm") InjectionForm form) {
    int id = form.getId_injection();
    // Supprimer l'enregistrement avec l'id récupéré
    ...
    return "redirect:/userOnly/MyInjections";
}
 

Notez que vous devrez également définir une classe InjectionForm qui contiendra un champ id_injection pour stocker la valeur de l'input caché. Vous pouvez utiliser cette classe comme modèle pour votre formulaire en utilisant l'annotation th:object="${InjForm}".

0