Créons une application TODO en Java 4 Implémentation de la fonction de publication

Bonjour. Cette fois, je voudrais faire la partie fonction de publication de l'application TODO en Java.

Au fait, je n'ai pas abordé la validation cette fois, mais je ne présenterai la méthode que pour le traitement normal car elle apparaîtra dans un article ultérieur.

Collection de liens de création d'application TODO

1: Brève description de MVC 2: Je veux créer un modèle avec Spring Initializr et créer un Hello world 3: Enregistrer les données temporaires dans MySQL-> Tout obtenir-> Afficher en haut 4: Mise en place de la fonction d'affichage (ici et maintenant)

Créer une classe TodoForm

Tout d'abord, je voudrais préparer un conteneur pour les données lorsque l'utilisateur enregistre TODO. Cette fois, je voudrais l'implémenter dans la classe TodoForm.

Je pense que la hiérarchie pour créer des classes devrait être la même que TodoContoroller.

java/com/example/todo/TodoForm.java


@Data
public class TodoForm {
    private long Id;

    @NotNull
    @Size(min = 1, max =30)
    private String title;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate deadline;

    private boolean status;
}

↑ Ça devrait être comme ça.

Si vous ne pouvez pas utiliser d'annotations ...

Il semble que les spécifications aient changé depuis Spring 2.3, vous devez donc l'ajouter manuellement afin d'utiliser des annotations de type validation.

build.gradle



dependencies {
  	compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
}

Si vous ajoutez ce qui précède aux dépendances, vous pouvez utiliser @Size et ainsi de suite!

Ajouter une logique pour enregistrer TODO sur TodoService

Ensuite, éditez le service.

java/com/example/todo/TodoService.java


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

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

Puisque nous ne nous enregistrons que cette fois, la valeur de retour est définie sur void.

Définissez le type de TodoForm formData passé comme argument dans le TodoEntity nouvellement créé et enregistrez-le. Puisque set ~~ et get ~~ sont attachés avec @Data dans chaque classe, LomBok peut créer et utiliser automatiquement des setters et des getters.

Il peut être difficile de comprendre soudainement ce domaine lors de l'utilisation de Lombok, donc si vous voulez comprendre plus profondément, vous devriez étudier le concept de setter getter.

Enfin, enregistrez-le avec la fonction de classe Repository save et enregistrez-le dans la base de données!

Appeler une fonction de classe de service à partir de TodoContoroller

Maintenant que la classe Service a été implémentée, appelons-la depuis le contrôleur!

python


@Controller
@RequiredArgsConstructor
public class TodoController {

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

Ce à quoi je voudrais faire attention ici, c'est l'annotation @ModelAttribute!

Cette annotation a des usages différents selon qu'elle est utilisée comme argument ou juste avant une méthode!

L'utilisation cette fois-ci est de rendre les données envoyées depuis la face avant dans le type TodoForm afin qu'elles puissent être utilisées dans la fonction.

Veuillez vous référer au site ici pour des explications faciles à comprendre.

Enregistrez TODO dans la base de données en envoyant formData au setTodo créé précédemment.

De plus, lorsque le traitement est terminé, il passera à / top.

Modification de la page TOP

Enfin, éditons la face avant!

python


~Abréviation
<body>
    <!--Formulaire de publication-->
    <div class=" w-75 h-auto my-1 mx-auto pt-5">
        <p class="pl-5">Créer une nouvelle tâche</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">Nom de ToDo</span>
                    <input type="text" name="title" placeholder="Entrez ToDo dans les 30 caractères" class="col-9">
                </label>
                <label class="row my-0">
                    <span class="col-2 text-center">Date limite</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">Ajouter ToDo</button>
        </form>
    </div>
</body>

Le contenu enregistré est passé à la fonction du contrôleur mappé à / register dans th: action.

De plus, puisque method = "POST", des spécifications détaillées telles que les fonctions POST et / register sont spécifiées.

Cette idée est très importante pour comprendre la nature des méthodes HTTP, vous pouvez donc vous référer au site here.

th: object est utilisé pour spécifier le conteneur des données transmises.

Les données soumises sont insérées dans l'objet TodoForm créé au tout début de cet article.

Lorsque le bouton d'enregistrement est enfoncé

 <input type="text" name="title" placeholder="Entrez ToDo dans les 30 caractères" class="col-9">

Le contenu saisi dans name = "title" est stocké dans la variable avec le même nom (bien sûr, title) de la classe FormData.

Un bref résumé

Comment était-ce? Pour résumer brièvement ...

  1. La réception envoie les données nécessaires à TODO
  2. La destination est spécifiée par th: action ~~ et mesod = ~~. Les données transmises sont stockées dans un objet spécifique (cette fois nommé FormData)
  3. L'objet est envoyé du contrôleur à la classe de service qui décrit la logique métier.
  4. Créez un Enitty (conteneur de données) pour l'enregistrement TODO dans la classe de service et remplissez-le avec le contenu de l'objet provenant du contrôleur.
  5. Enregistrez-le avec une fonction de référentiel.

C'est comme ça!

Je pense que vous pourriez progressivement comprendre le flux de MVC.

La prochaine fois, j'aimerais toucher la page d'édition. À la prochaine!

Recommended Posts

Créons une application TODO en Java 4 Implémentation de la fonction de publication
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
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