Lassen Sie uns eine TODO-App in Java 8 erstellen. Implementierung von Bearbeitungsfunktionen

Hallo. Dieses Mal möchte ich den in Java Spring veröffentlichten Teil der Bearbeitungsfunktion von TODO implementieren.

Linkerfassung zur Erstellung von TODO-Anwendungen

1: [Grundlegendes zu den Super-Grundlagen] Eine kurze Beschreibung von MVC 2: [Vorlage vorbereiten] Ich möchte eine Vorlage mit Spring Initializr erstellen und eine Hallo-Welt erstellen 3: [Verbindung / Einstellungen / Datenanzeige mit MySQL] Temporäre Daten in MySQL speichern-> Alle abrufen-> Oben anzeigen 4: [POST-Funktion] Implementierung der Posting-Funktion 5: [PATCH-Funktion] TODO-Anzeige umschalten 6: [Einfach zu verwendendes JpaRepository] Implementierung der Suchfunktion [7: [Häufig mit Thymeleaf-Vorlagenfragmenten] Header erstellen] (https://qiita.com/nomad_kartman/items/8c33eca2880c43a06e40) 8: [PUT-Funktion] Implementierung der Bearbeitungsfunktion (hier und jetzt)

Ablauf der Bearbeitungsfunktion

Zunächst möchte ich kurz den Ablauf der Bearbeitungsfunktionen erläutern!

  1. Suchen Sie die TODO-Daten, die Sie bearbeiten möchten, nach ID und zeigen Sie sie auf der Vorderseite an

  2. Geben Sie Ihre Änderungen ein und senden Sie sie per PUT an die Steuerung

  3. Intern verarbeiten und speichern.

Wie zu erwarten, sieht es so aus!

Beginnen wir mit der Anzeige des TODO, das Sie bearbeiten möchten, an der Rezeption!

Zeigen Sie das TODO an, das Sie bearbeiten möchten

Holen Sie sich das TODO, das Sie bearbeiten möchten, und senden Sie es an die Vorderseite

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

Suchen Sie zunächst die ID des TODO, das Sie bearbeiten möchten, in der TodoEntity, die Sie zuvor verwendet haben, und packen Sie sie.

Und indem Sie model.addAttribute ("Variablenname", das Objekt, das Sie übergeben möchten) setzen, können Sie dieses Objekt auf der Vorderseite verwenden.

Dieses Mal werde ich es so verwenden, wie es mit dem Namen editTarget ist.

Da der Übergang zur Bearbeitungsseite mit return "edit"; erfolgt, erstellen Sie die Bearbeitungsseite.

Erstellen Sie eine Bearbeitungsseite auf der Vorderseite

python


<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Bearbeiten</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>
        
        <!--Formular bearbeiten-->
        <div class=" w-75 h-auto my-1 mx-auto pt-5">
            <p class="pl-5">Aufgaben aktualisieren</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">ToDo Name</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">Frist</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">aktualisieren</button>
            </form>
        </div>
        <!--/Formular bearbeiten-->
    
        <!--Lesen Sie 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>

Es mag etwas lang und schwer zu sehen sein, aber es ist eine Bearbeitungsseite.

th:action

↓ Der erste Punkt ist der Exportteil des Bearbeitungsformulars ↓

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'}" Der Inhalt des Formulars wird an die angegebene URL gesendet.

Diesmal /edit/{id}/complete Ich werde es an die URL senden. Dieser Vorgang wird später beschrieben.

th:objects

th:object="${editTarget}"

Dies ist das editTarget, das zuvor von der Funktion showEdit gesendet wurde. Auf diese Weise können Sie editTarget in diesem Formular verwenden.

Obwohl es PUT ist, method = "post" ???

Ich denke, dies ist der Punkt, der dazu neigt, in diesem Prozess stecken zu bleiben.

Dieses Mal möchte ich die PUT-Methode zum Bearbeiten verwenden, also mit method = "put"! ?? Das könnte man denken. (Eigentlich habe ich das zuerst gemacht)

HTML5 kann jedoch keine PUT / DELETE-Methoden verarbeiten!

Daher ist die folgende Verarbeitung erforderlich.

  1. Senden Sie Formulardaten per POST aus HTML.
  2. Schalten Sie die POST-Methode auf der Federseite auf die PUT-Methode um!
  3. Senden Sie Formulardaten an die erwartete Funktion.

Sie mögen sich fragen, warum so etwas problematisch ist ... aber im Moment scheint es keine andere Wahl zu geben, als dies zu tun.

damit

python


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

Ich habe einen Prozess wie das Konvertieren von POST in PUT durchgeführt, indem ich eine Eingabe vorbereitet habe, die nicht auf der Vorderseite angezeigt wird.

Schreiben Sie application.properties neu, um POST-> PUT zu erstellen

Tatsächlich führt dies allein jedoch zu einem Fehler. Fügen Sie daher Folgendes zu application.properties hinzu.

resources/application.properties


spring.mvc.hiddenmethod.filter.enabled=true

Dadurch wird der Fehler behoben.

Apropos Behandlung der HTTP-PUT / DELETE-Methode mit SpringBoot2.2 + Thymeleaf Wenn Sie interessiert sind, lesen Sie bitte diesen Artikel, da er Ihr Verständnis vertiefen wird.

Bearbeitungsprozess implementieren

Verarbeiten Sie die bearbeiteten Inhalte, die von der Rezeption gesendet wurden

Als nächstes implementieren wir den Teil, der den bearbeiteten Inhalt verarbeitet.

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";
    }

Fügen Sie dem Controller die PUT-Zuordnung hinzu.

Speichern Sie die von vorne gesendeten Daten mit @ModelAttribute in der TodoForm-Klasse.

↓ Und ich werde das Objekt an editTodo der Serviceklasse ↓ senden

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);
    }

Holen Sie sich TODO von id und schreiben Sie jeden Wert in formData, den bearbeiteten Inhalt.

Da diesmal kein Rückgabewert vorhanden ist, wird dieser auf ungültig gesetzt.

Damit ist die Implementierung des Bearbeitungsprozesses abgeschlossen!

Recommended Posts

Lassen Sie uns eine TODO-App in Java 8 erstellen. Implementierung von Bearbeitungsfunktionen
Lassen Sie uns eine TODO-App in Java 6 erstellen. Implementierung der Suchfunktion
Erstellen wir eine TODO-Anwendung mit Java 1 Kurze Erläuterung von MVC
Lassen Sie uns eine TODO-App in Java 5 erstellen. Schalten Sie die Anzeige von TODO um
Implementierung einer ähnlichen Funktion in Java
Erstellen wir eine TODO-Anwendung mit Java 11-Ausnahmebehandlung, wenn Sie mit einer nicht vorhandenen ID auf TODO zugreifen
Erstellen Sie eine TODO-App in Java 7 Create Header
Lassen Sie uns mit Java ein supereinfaches Webframework erstellen
Erstellen wir eine TODO-App in Java 13 TODO-Formularvalidierung 1: Zeichenbegrenzung · Gradle-Update zur Verwendung von @Validated
Erstellen wir eine TODO-App mit Java 3 Speichern Sie temporäre Daten in MySQL-> Get all-> Display on top
Erstellen wir eine Taschenrechner-App mit Java ~ Erstellen Sie einen Anzeigebereich im Fenster
Java-Implementierung von Tri-Tree
Erstellen wir eine TODO-App in Java 9 Erstellen einer TODO-Anzeige Sortieren nach Datum und Uhrzeit + Setzen Sie das Fälligkeitsdatum auf das aktuelle Datum
Lassen Sie uns eine TODO-Anwendung mit Java 2 erstellen. Ich möchte eine Vorlage mit Spring Initializr erstellen und eine Hello-Welt erstellen
Erstellen wir eine Taschenrechner-App mit Java ~ Zeigen Sie das Anwendungsfenster an
Erstellen wir eine TODO-Anwendung mit Java 12-Verarbeitung, wenn eine Anforderung mit einer nicht verwendeten HttpMethod eingeht. ・ Verarbeitung, wenn ein Fehler auf dem Server auftritt
[Implementierungsverfahren] Erstellen Sie eine Benutzerauthentifizierungsfunktion mithilfe von Hexerei in Rails
Implementierung von DBlayer in Java (RDB, MySQL)
Lassen Sie uns eine Java-Entwicklungsumgebung erstellen (Aktualisierung)
Rolle von JSP in Webanwendungen [Java]
Umfang des Versuchs, eine Java-Webanwendung unter Windows Server 2016 zu erstellen
Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Benötigen Sie eine speicherbewusste Implementierung von Java?
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Messen Sie die Größe eines Ordners mit Java
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Erstellen Sie mit SwiftUI 2.0 eine benutzerdefinierte Registerkartenansicht
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Einführung]
[JQuery] Implementierungsverfahren der AutoComplete-Funktion [Java / Spring]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Einführung]
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [99. Mod-Ausgabe]
Erstellen wir eine vielseitige Dateispeicher (?) - Operationsbibliothek, indem wir die Dateispeicherung / -erfassung mit Java abstrahieren
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [0. Basisdatei]
Interpreter-Implementierung durch Java
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [4. Tools hinzufügen]
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
Ein kurzer Überblick über Java, das in Klasse 4 gelernt wurde
[Java] Erstellen Sie einen Filter
[Java] Lass uns einen Minecraft Mod 1.14.4 erstellen [5. Rüstung hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Extra Edition]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [7. Fortschritt hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [6. Rezept hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Element hinzufügen]
Implementierung der Suchfunktion
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Basisdatei]
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [1. Element hinzufügen]
So erstellen Sie einen Daten-URI (base64) in Java
Boyer-Moore-Implementierung in Java
Lass uns einen Roboter bauen! "Eine einfache Demo von Java AWT Robot"
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Implementierung der Heap-Sortierung (in Java)
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
Implementierung der Pagenationsfunktion
Ein kurzer Überblick über Java, das in Klasse 2 gelernt wurde