Lassen Sie uns eine TODO-App in Java 5 erstellen. Schalten Sie die Anzeige von TODO um

Hallo, diesmal durch Drücken der Taste TODO der Fertigstellung ⇄ unvollständig möchten wir die Umschaltbarkeit implementieren.

Linkerfassung zur Erstellung von TODO-Anwendungen

1: Kurze Beschreibung von MVC 2: Ich möchte eine Vorlage mit Spring Initializr erstellen und eine Hallo-Welt erstellen 3: Temporäre Daten in MySQL speichern-> Alle abrufen-> Oben anzeigen 4: Implementierung der Posting-Funktion 5: Schalten Sie die TODO-Anzeige (hier und jetzt)

Suchen Sie nach einem bestimmten TODO anhand der ID

Zunächst der Ablauf dieses Prozesses ・ Suchen und erhalten Sie TODO von id ・ TODO-Status mit true ⇄ false wechseln ・ Speichern Sie TODO Es wird sein.

Lassen Sie uns also den Teil tun, um TODO sofort von id zu erhalten.

java/com/example/todo/TodoService.java


    public TodoEntity findTodoById(Long todoId) {
        Optional<TodoEntity> todoResult = todoRepository.findById(todoId);
        //Auf null prüfen
        return todoResult.get();
    }

Es sollte so sein.

Der hier verwendete optionale Typ ist ein Typ, der explizit angibt, dass der darin enthaltene Typ null sein kann.

//nullチェックする Ich werde den Teil, der markiert ist, so lassen, wie er in einem zukünftigen Artikel gemacht wird.

Diesmal ist es vom Typ Optional Sie können es in den TodoEntity-Typ ändern, indem Sie Optional .get () festlegen.

Jetzt können Sie TODO per ID erhalten!

Implementierung einer Logik zum Umschalten zwischen abgeschlossen und unvollständig

Als nächstes implementieren wir die Logik zum Umschalten des TODO-Status.

java/com/example/todo/TodoService.java


    public void switchTodo(Long todoId) {
        TodoEntity todoEntity = findTodoById(todoId);
        todoEntity.setStatus(!todoEntity.isStatus());
        todoRepository.save(todoEntity);
    }

Holen Sie sich zuerst das TODO, indem Sie die vorherige Funktion aufrufen. Und ich wechsle den Status, aber mit! TodoEntity.isStatus () befindet es sich im entgegengesetzten Zustand zum aktuellen Zustand. (Dies ist ein Schreibstil, der häufig beim Umschalten zwischen Boreeanern verwendet wird.)

Bearbeiten Sie den Controller

java/com/example/todo/TodoController.java


    @PatchMapping("/toggle-status/{id}")
    public String switchStatus(@PathVariable("id") Long todoId) {
        todoService.switchTodo(todoId);
        return "redirect:/top";
    }

Lass uns so schreiben.

@PathVariable ist eine Annotation, bei der die {id} in die URL eingebettet wird.

Bearbeitung auf der Vorderseite

<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>hello</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>

    <!--Formular posten-->
    <div class=" w-75 h-auto my-1 mx-auto pt-5">
        <p class="pl-5">Erstellen Sie eine neue Aufgabe</p>
        <form th:action="@{/register}" th:object="${ToDoForm}" 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" placeholder="Geben Sie ToDo innerhalb von 30 Zeichen ein" class="col-9">
                </label>
                <label class="row my-0">
                    <span class="col-2 text-center">Frist</span>
                    <input type="date" id="date" name="deadline" class="col-9 my-0">
                </label>
            </div>
            <button class="btn btn-primary w-25 col-2 mr-3" type="submit">ToDo hinzufügen</button>
        </form>
    </div>
    <div th:each="todo: ${todoList}" class=" w-75 h-25 my-1 mx-auto pt-5">
        <div class="container">
            <div  class="row">
                <div class="col-5 pl-5">
                    <p th:text="${todo.title}" class="mb-1"></p>
                    <p class="mb-1">Frist:<span  th:text="${todo.deadline}"></span></p>
                    <p class="mb-1">Erstellungsdatum:<span  th:text="${todo.createTime}"></span></p>
                </div>
                <div class="col-2 d-flex justify-content-start align-items-center px-0">
                    <a class="h-100 w-75 btn btn-info pt-4">
Bearbeiten
                    </a>
                </div>
<!--〜〜〜〜〜〜 Diesmal hinzuzufügende Inhalte〜〜〜〜〜〜-->
                <div th:if="${todo.status}" class="col-3 d-flex px-0">
                    <form th:action="@{/toggle-status/{id}(id=${todo.id})}" method="post" class="w-100 container d-flex my-0 mx-auto p-0 mr-2">
                        <input type="hidden" name="_method" value="patch">
                        <button type="submit" class="h-100 w-75 btn btn-success text-white">
Erledigt
                        </button>
                    </form>
                </div>
                <div th:unless="${todo.status}" class="col-3 d-flex px-0">
                    <form th:action="@{/toggle-status/{id}(id=${todo.id})}" method="post" class="w-100 container d-flex my-0 mx-auto p-0 mr-2">
                        <input type="hidden" name="_method" value="patch">
                        <button type="submit" class="h-100 w-75 btn btn-danger text-white">
Unvollständig
                        </button>
                    </form>
                </div>
<!--〜〜〜〜〜〜 Diesmal hinzuzufügende Inhalte 〜〜〜〜〜〜-->

            </div>
        </div>
    </div>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" 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>

th:if="${todo.status}"

Dies bedeutet jedoch, dass der Status, wenn er wahr ist, abgeschlossen wurde. Es wird als abgeschlossen in grün angezeigt.

Obwohl method = "post" gesetzt ist, wurde @PatchMapping in der vorherigen Controller-Bearbeitung verwendet.

Tatsächlich unterstützt HTML nicht die Möglichkeit, einen Patch anzufordern. Wenn Sie also eine Anfrage mit Patch stellen möchten, müssen Sie etwas entwickeln.

In Thymeleaf

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

Wenn du möchtest

in application.property

spring.mvc.hiddenmethod.filter.enabled=true

Wenn Sie hinzufügen, ist type = "hidden" verfügbar und Sie können Patch-Anfragen senden.

Controller, Service, TodoEntity-Zusammenfassung

Contoller


package com.example.todo;

import com.example.todo.dao.TodoEntity;
import lombok.RequiredArgsConstructor;
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.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Controller
@RequiredArgsConstructor
public class TodoController {

    private final TodoService todoService;
    @GetMapping("/top")
    public String top(Model model){
        List<TodoEntity> todoEntityList = todoService.findAllTodo();
        model.addAttribute("todoList", todoEntityList);
        return "top";
    }

    @PostMapping("/register")
    public String register(@ModelAttribute TodoForm formData) {
        todoService.setTodo(formData);
        return "redirect:/top";
    }

    @PatchMapping("/toggle-status/{id}")
    public String switchStatus(@PathVariable("id") Long todoId) {
        todoService.switchTodo(todoId);
        return "redirect:/top";
    }
}

Service


package com.example.todo;

import com.example.todo.dao.TodoEntity;
import com.example.todo.dao.TodoRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
@RequiredArgsConstructor
public class TodoService {
    private final TodoRepository todoRepository;

    public List<TodoEntity> findAllTodo() {
        return todoRepository.findAll();
    }

    public void setTodo(TodoForm formData) {
        TodoEntity todo = new TodoEntity();
        todo.setTitle(formData.getTitle());
        todo.setDeadline(formData.getDeadline());
        todoRepository.save(todo);
    }

    public TodoEntity findTodoById(Long todoId) {
        Optional<TodoEntity> todoResult = todoRepository.findById(todoId);
        //Ausnahmen behandeln
        return todoResult.get();
    }

    public void switchTodo(Long todoId) {
        TodoEntity todoEntity = findTodoById(todoId);
        todoEntity.setStatus(!todoEntity.isStatus());
        todoRepository.save(todoEntity);
    }
}

Entity


package com.example.todo.dao;

import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Entity
@Getter
@Setter
@Table(name="todo")
public class TodoEntity {
    @Id
    @Column
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name="title")
    private String title;

    @Column(name="deadline")
    private LocalDate deadline;

    @Column(name="status")
    private boolean status;

    @CreationTimestamp
    @Column(name="create_time")
    private LocalDateTime createTime;

    @UpdateTimestamp
    @Column(name="update_time")
    private LocalDateTime updateTime;
}

Die aktuelle TODO-App sieht wie oben aus.

Recommended Posts

Lassen Sie uns eine TODO-App in Java 5 erstellen. Schalten Sie die Anzeige von TODO um
Lassen Sie uns eine TODO-App in Java 4 erstellen. Implementierung der Buchungsfunktion
Lassen Sie uns eine TODO-App in Java 8 erstellen. Implementierung von Bearbeitungsfunktionen
Erstellen wir eine TODO-Anwendung mit Java 1 Kurze Erläuterung von MVC
Erstellen wir eine Taschenrechner-App mit Java ~ Zeigen Sie das Anwendungsfenster an
Erstellen wir eine Taschenrechner-App mit Java ~ Erstellen Sie einen Anzeigebereich im Fenster
Erstellen wir eine TODO-App mit Java 3 Speichern Sie temporäre Daten in MySQL-> Get all-> Display on top
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
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
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
Messen Sie die Größe eines Ordners mit Java
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
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 Sie eine Methode, um den Steuersatz in Java zurückzugeben
[Java] Schauen wir uns die Switch-Ausdrücke (Vorschau) von JDK 13 an.
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab
Holen Sie sich das Ergebnis von POST in Java
Lassen Sie uns eine Java-Entwicklungsumgebung erstellen (Aktualisierung)
Die Geschichte des Schreibens von Java in Emacs
Rolle von JSP in Webanwendungen [Java]
Erhöhen Sie dynamisch die Anzahl der Elemente in einem zweidimensionalen Java-Array (mehrdimensionales Array).
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Lassen Sie uns das Ergebnis der Analyse von Java-Bytecode in einem Klassendiagramm ausdrücken
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
Umfang des Versuchs, eine Java-Webanwendung unter Windows Server 2016 zu erstellen
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Behandlung von Java Beans in der Methodenkette
Die Geschichte eines gewöhnlichen Othello in Java
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Über die Idee anonymer Klassen in Java
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Eine Geschichte über das JDK in der Java 11-Ära
Die Geschichte des Lernens von Java in der ersten Programmierung
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]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Einführung]
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Zeigen Sie "Hello World" im Browser mit Java an
Zeigen Sie "Hello World" im Browser mit Java an
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [99. Mod-Ausgabe]
Importieren Sie Dateien derselben Hierarchie in Java
Ich habe die Daten der Reise (Tagebuchanwendung) in Java erhalten und versucht, sie # 001 zu visualisieren
AndroidStudio Verweisen wir auf C ++ im Modul anderer Projekte (Java / Kotlin).
Erstellen wir eine vielseitige Dateispeicher (?) - Operationsbibliothek, indem wir die Dateispeicherung / -erfassung mit Java abstrahieren
Erstellen Sie einen benutzerdefinierten Formatierer für Yellowfin und zeigen Sie das Minus des numerischen Werts mit △ (Dreieck) an.
Überprüfen Sie das ID-Token eines von AWS Cognito in Java authentifizierten Benutzers
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [0. Basisdatei]
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
[Java] Deklarieren wir die in der Schleife verwendeten Variablen in der Schleife [Variationen im Block]
[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]