Créons une application TODO en Java 8 Implémentation des fonctions d'édition

Bonjour. Cette fois, je voudrais implémenter la partie fonction d'édition de TODO publiée dans Java Spring.

Collection de liens de création d'application TODO

1: [Comprendre les super bases] Une brève description de MVC 2: [Préparer un modèle] Je veux créer un modèle avec Spring Initializr et créer un monde Hello 3: [Connexion / Paramètres / Affichage des données avec MySQL] Enregistrer les données temporaires dans MySQL-> Tout obtenir-> Afficher en haut 4: [Fonction POST] Implémentation de la fonction de publication 5: [Fonction PATCH] Basculer l'affichage TODO 6: [Easy to use JpaRepository] Implémentation de la fonction de recherche [7: [Commun avec les fragments de modèle Thymeleaf] Créer un en-tête] (https://qiita.com/nomad_kartman/items/8c33eca2880c43a06e40) 8: [Fonction PUT] Implémentation de la fonction d'édition (ici et maintenant)

Flux de la fonction d'édition

Tout d'abord, je voudrais expliquer brièvement le flux des fonctions d'édition!

  1. Recherchez les données TODO que vous souhaitez modifier par ID et affichez-les sur le devant

  2. Entrez vos modifications et envoyez-les au contrôleur via PUT

  3. Traitez en interne et enregistrez.

Comme vous vous en doutez, cela ressemble à ceci!

Commençons par afficher le TODO que vous souhaitez éditer à la réception!

Affichez le TODO que vous souhaitez modifier

Obtenez le TODO que vous souhaitez modifier et envoyez-le au recto

    @GetMapping("/edit/{id}")
    public String showEdit(Model model, @PathVariable("id") long id ) {
        TodoEntity editTarget = todoService.findTodoById(id);
        model.addAttribute( "editTarget" , editTarget);
        return "edit";
    }

Tout d'abord, recherchez l'ID du TODO que vous souhaitez modifier dans TodoEntity que vous avez utilisé auparavant et emballez-le.

Et en définissant model.addAttribute ("nom de la variable", l'objet que vous voulez passer), vous pouvez utiliser cet objet sur la face avant.

Cette fois, je vais l'utiliser tel quel avec le nom editTarget.

Puisque la transition vers la page d'édition se fait avec return 'edit' '; ``, créez la page d'édition.

Créer une page d'édition au recto

python


<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Éditer</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    </head>
    <body>
        <!-- Header -->
        <header th:replace="common/header :: header_fragment()"></header>
        
        <!--Modifier le formulaire-->
        <div class=" w-75 h-auto my-1 mx-auto pt-5">
            <p class="pl-5">Mettre à jour les tâches</p>
            <form  th:action="@{'/edit/' + *{id} + '/complete'}" th:object="${editTarget}" method="post" class="container d-flex w-auto my-0 mx-auto">
                <div class="w-100">
                    <label class="row">
                        <span class="col-2 text-center">Nom de ToDo</span>
                        <input type="text" name="title" th:value="${editTarget.title}" class="col-9">
                    </label>
                    <label class="row my-0">
                        <span class="col-2 text-center">Date limite</span>
                        <input type="date" name="deadline" th:value="${editTarget.deadline}" class="col-9 my-0">
                    </label>
                </div>
                <input type="hidden" name="_method" value="put">
                <button class="btn btn-primary w-25 col-2 mr-3" type="submit">mise à jour</button>
            </form>
        </div>
        <!--/Modifier le formulaire-->
    
        <!--lire bootstrap js-->
        <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
    </body>
</html>

C'est peut-être un peu long et difficile à voir, mais c'est une page d'édition.

th:action

↓ Le premier point est la partie export du formulaire d'édition ↓

python


 <form  th:action="@{'/edit/' + *{id} + '/complete'}" th:object="${editTarget}" method="post" class="container d-flex w-auto my-0 mx-auto">

th:action="@{'/edit/' + *{id} + '/complete'}" Le contenu du formulaire est envoyé à l'URL spécifiée.

Cette fois /edit/{id}/complete Je vais l'envoyer à l'URL. Ce processus sera décrit plus loin.

th:objects

th:object="${editTarget}"

Ceci est le editTarget envoyé par la fonction showEdit plus tôt. En faisant cela, vous pouvez utiliser editTarget dans ce formulaire.

Même si c'est PUT, method = "post" ???

Je pense que c'est le point qui a tendance à rester coincé dans ce processus.

Cette fois, je veux utiliser la méthode PUT pour l'édition, donc avec method = "put"! ?? Vous pourriez penser cela. (En fait, je l'ai fait au début)

Cependant, HTML5 ne peut pas gérer les méthodes PUT / DELETE!

Par conséquent, le traitement suivant est requis.

  1. Envoyez les données du formulaire par POST depuis HTML.
  2. Basculez la méthode POST sur la méthode PUT du côté Spring!
  3. Envoyez les données du formulaire à la fonction attendue.

Vous vous demandez peut-être pourquoi une chose aussi gênante est ... mais pour l'instant, il semble qu'il n'y ait pas d'autre choix que de le faire.

alors

python


 <input type="hidden" name="_method" value="put">

Je faisais un processus comme la conversion de POST en PUT en préparant une entrée qui n'est pas affichée sur la face avant.

Réécrivez application.properties pour que POST-> PUT

Cependant, en fait, cela seul provoquera une erreur, alors ajoutez ce qui suit à application.properties.

resources/application.properties


spring.mvc.hiddenmethod.filter.enabled=true

Cela éliminera l'erreur.

Au fait Gestion de la méthode HTTP PUT / DELETE avec SpringBoot2.2 + Thymeleaf Si vous êtes intéressé, veuillez lire cet article car il approfondira votre compréhension.

Mettre en œuvre le processus d'édition

Traiter le contenu édité envoyé depuis la réception

Ensuite, nous implémenterons la partie qui traite le contenu édité.

java/com/example/todo/TodoController.java


    @PutMapping("/edit/{id}/complete")
    public String edit(@ModelAttribute TodoForm formData, @PathVariable("id") long id) {
        todoService.editToDo(formData);
        return "redirect:/top";
    }

Ajoutez PUT Mapping au contrôleur.

Stockez les données envoyées depuis l'avant avec @ModelAttribute dans la classe TodoForm.

↓ Et j'enverrai l'objet à editTodo de la classe de service ↓

java/com/example/todo/TodoService.java


    public void editToDo(TodoForm formData) {
        TodoEntity todoEntity = findTodoById(formData.getId());
        todoEntity.setTitle(formData.getTitle());
        todoEntity.setDeadline(formData.getDeadline());
        todoEntity.setStatus(formData.isStatus());
        todoRepository.save(todoEntity);
    }

Récupérez TODO à partir de id et réécrivez chaque valeur dans formData qui est le contenu modifié.

Puisqu'il n'y a pas de valeur de retour cette fois, il est défini sur void.

Ceci termine la mise en œuvre du processus d'édition!

Recommended Posts

Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Créons une application TODO avec Java 1 Brève explication de MVC
Créons une application TODO en Java 5 Changer l'affichage de TODO
Implémentation d'une fonction similaire en Java
Créons une application TODO en Java 11 Gestion des exceptions lors de l'accès à un TODO avec un ID inexistant
Créer une application TODO dans Java 7 Créer un en-tête
Créons un framework Web ultra-simple avec Java
Créons une application TODO dans Java 13 TODO form validation 1: Character limit-Update Gradle to use @Validated
Créons une application TODO avec Java 3 Enregistrez les données temporaires dans MySQL-> Tout obtenir-> Afficher en haut
Faisons une application de calculatrice avec Java ~ Créez une zone d'affichage dans la fenêtre
Implémentation Java de tri-tree
Créons une application TODO en Java 9 Créer un affichage TODO Trier par date et heure + Définir la date d'échéance sur la date actuelle
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
Faisons une application de calcul avec Java ~ Afficher la fenêtre de l'application
Créons une application TODO avec Java 12 Processing lorsqu'une requête arrive avec une HttpMethod inutilisée ・ Traitement lorsqu'une erreur se produit sur le serveur
[Procédure d'implémentation] Créer une fonction d'authentification utilisateur à l'aide de sorcellerie dans Rails
Implémentation de DBlayer en Java (RDB, MySQL)
Créons un environnement de développement Java (mise à jour)
Rôle de JSP dans les applications Web [Java]
Volume d'essais pour créer une application Web Java sur Windows Server 2016
Créer une fonction d'authentification dans l'application Rails à l'aide de devise
Créer un CSR avec des informations étendues en Java
Avez-vous besoin d'une implémentation de Java compatible avec la mémoire?
Créons un processus chronométré avec la minuterie de Java! !!
Mesurer la taille d'un dossier avec Java
Essayez de créer un babillard en Java
Créer un onglet personnalisé avec SwiftUI 2.0
[Java] Créons un Minecraft Mod 1.14.4 [Introduction]
[JQuery] Procédure d'implémentation de la fonction de saisie semi-automatique [Java / Spring]
[Java] Créons un Minecraft Mod 1.16.1 [Introduction]
Un examen rapide de Java appris en classe
[Java] Créons un Minecraft Mod 1.14.4 [99. Mod output]
Créons une bibliothèque d'opérations de stockage de fichiers polyvalente (?) En faisant abstraction du stockage / acquisition de fichiers avec Java
[Java] Créons un Minecraft Mod 1.14.4 [0. Fichier de base]
Implémentation de l'interpréteur par Java
[Java] Créons un Minecraft Mod 1.14.4 [4. Ajouter des outils]
Comment créer un environnement Java en seulement 3 secondes
Un examen rapide de Java appris en classe part4
[Java] Créer un filtre
[Java] Créons un Minecraft Mod 1.14.4 [5. Ajouter une armure]
[Java] Créons un Minecraft Mod 1.14.4 [édition supplémentaire]
[Java] Créons un Minecraft Mod 1.14.4 [7. Add progress]
[Java] Créons un Minecraft Mod 1.14.4 [6. Ajouter une recette]
[Java] Créons un Minecraft Mod 1.16.1 [Ajouter un élément]
Implémentation de la fonction de recherche
[Java] Créons un Minecraft Mod 1.16.1 [Fichier de base]
J'ai essayé de créer une compétence Clova en Java
[Java] Créons un Minecraft Mod 1.14.4 [1. Ajouter un élément]
Comment créer un URI de données (base64) en Java
Implémentation Boyer-Moore en Java
Faisons un robot! "Une simple démo de Java AWT Robot"
J'ai essayé de créer une fonction de connexion avec Java
Implémentation du tri de tas (en java)
Un examen rapide de Java appris en classe part3
Mise en œuvre de la fonction de pagénation
Un examen rapide de Java appris en classe part2