[JAVA] Un moyen très simple d'utiliser enum avec JSP

1.Tout d'abord

Contrairement aux constantes, Java enum est de type sécurisé et est un type de données pratique pouvant avoir plusieurs données. Par conséquent, vous pouvez définir le code tel que master et sa signification ensemble. Cette fois, je voudrais expliquer comment afficher facilement les zones de liste et les cases à cocher en utilisant l'enum dans JSP. Les applications Web sont basées sur spring-boot (spring mvc, TERASOLUNA 5.x).

2. Définition de l'énumération

Définissez l'énumération utilisée dans cet exemple. J'ai fait une énumération avec les données du champ code de int et le champ label à afficher. Si vous n'utilisez pas lombok, définissez également explicitement le constructeur et le setter.

Status.java


package com.example.demo;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public enum Status {

    APPROVAL(1, "Approbation"),
    DENIAL(2, "Le déni"),
    WITHDRAWAL(3, "Retrait");

    int code;
    String label;

    //★ Point 1
    public String getName() {
        return name();
    }
}

** ★ Point 1 ** enum a une méthode appelée name (), mais nous voulons y accéder en tant que getter, nous définissons donc une méthode getName () encapsulée. Il s'agit d'une mesure à utiliser enum avec JSP.

3. Définition de la classe de formulaire

Définit une classe Form qui stocke les données saisies.

DemoForm.java


public class DemoForm implements Serializable {

    //★ Point 2
    @NotNull
    Status status;

    // ommited
}

** ★ Point 2 ** Définissez l'énumération définie comme un champ tel quel. Vous n'êtes pas obligé de le recevoir dans le code int ou dans l'étiquette String. Puisque enum est un type de données, ce champ sera toujours «Statut». Puisque je veux en faire un élément obligatoire, j'ai ajouté l'annotation @ NotNull de Bean Validation.

4. JSP qui génère une zone de liste avec enum

Créez un JSP qui génère une zone de liste avec enum, ce qui est le point de cet article. Utilisez les fonctions JSP standard et les fonctions de ressort (<form: xxx /> est l'étiquette de ressort)

JSP qui génère une zone de liste avec enum


<%--★ Point 3--%>
<%@ page import="com.example.demo.Status" %>

...réduction...

<%--★ Point 4--%>
<form:errors path="status"/>
<form:select path="status" items="${Status.values()}" itemLabel="label" itemValue="name" />

** ★ Point 3 ** Je veux faire référence à Status dans JSP, alors importez la classe avec <% @ page import =" fqcn "%>. Je l'ai souvent vu à l'époque où JSP était écrit dans des scriptlets, mais je ne le vois pas beaucoup de nos jours, mais c'est une fonction standard de JSP.

** ★ Point 4 ** Sortez la zone de liste en utilisant la balise <form: select /> du ressort. Puisqu'il existe de nombreux attributs, chacun est expliqué ci-dessous.

attribut La description
path Spécifiez le nom de champ correspondant de la classe Form. Cette foisstatusSera.
items Spécifiez la collection ou le tableau qui stocke les données à afficher dans la zone de liste.
Ici d'énumérationvalue()Le but est d'appeler une méthode statique. Cette méthode renvoie un tableau d'énumération.
Vous pouvez maintenant afficher 3 éléments d'énumération.
★ Au point 3StatusJ'ai importé ceci pour appeler cette méthode statique.
itemLabel Spécifiez le champ à utiliser pour l'élément d'affichage de la zone de liste.
Statut cette foisdelabelフィールドを表示したいdeでlabelEst spécifié.
itemValue Spécifiez le champ à utiliser pour la valeur de la zone de liste.
codeJe veux, mais icinameLe point est de préciser.

Puisque le getter sera appelé lors du rendu, ★ défini au point 1getName()La méthode sera appelée.

5. Zone de liste de sortie HTML

Le code HTML de la zone de liste de sortie est indiqué ci-dessous. L'attribut «value» de «

HTML de sortie (ajouter des sauts de ligne pour plus de lisibilité)


<select id="status" name="status">
  <option value="APPROVAL">Approbation</option>
  <option value="DENIAL">Le déni</option>
  <option value="WITHDRAWAL">Retrait</option>
</select>

Si vous définissez value sur une valeur non définie dans enum ( HOGE dans ce cas), une erreur de type Mismatch se produira comme indiqué ci-dessous. Cela se produit lorsque le formulaire HTML est falsifié et qu'une valeur invalide est définie pour value, ou lorsque le champ code est défini par erreur sur ʻitemValue` au point 4.

Lorsque la requête HTTP est effectuée avec une valeur qui ne peut pas être convertie


Failed to convert property value of type java.lang.String to required type com.example.demo.Status for property status; 
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] 
to type [com.example.demo.Status] for value HOGE; nested exception is java.lang.IllegalArgumentException: No enum constant com.example.demo.Status.HOGE

** Comme vous pouvez le voir dans l'explication jusqu'à présent, en utilisant enum dans JSP, le type safe d'enum est appliqué lorsqu'il est défini dans Form sans préparer une vérification d'entrée spéciale. ** **

6. JSP qui génère une case à cocher avec enum

Remplacez la classe Form par un tableau afin de pouvoir sélectionner plusieurs formulaires.

DemoForm.java


public class DemoForm implements Serializable {

    @NotNull
    @Size(min = 1, max = 3)
    Status[] status;
    // ommited
}

J'ai utilisé la balise <form: select /> lors de la sortie de la zone de liste, mais j'ai utilisé la balise <form: checkboxes /> pour la case à cocher. Veuillez noter qu'il existe également une balise <form: checkbox /> qui génère une case à cocher.

JSP qui génère une case à cocher avec enum


<%--★ Point 5--%>
<form:errors path="status"/>
<ul>
  <form:checkboxes path="status" items="${Status.values()}" 
      itemLabel="label" itemValue="name" element="li" />
</ul>

** ★ Point 5 ** Décrit l'attribut ʻelement, qui est différent de la zone de liste. Définissez ceci si vous souhaitez spécifier l'élément HTML qui encapsule la case à cocher de sortie. Cette fois, j'ai défini li pour en faire un format de liste en utilisant <ul> <li>.

7. HTML de la case à cocher de sortie

Le code HTML de la case à cocher de sortie est indiqué ci-dessous. Le formulaire de saisie de la case à cocher est entouré d'une balise <li>.

HTML de sortie (ajouter des sauts de ligne pour plus de lisibilité)


<ul>
  <li><input id="status1" name="status" type="checkbox" value="APPROVAL"/><label for="status1">Approbation</label></li>
  <li><input id="status2" name="status" type="checkbox" value="DENIAL"/><label for="status2">Le déni</label></li>
  <li><input id="status3" name="status" type="checkbox" value="WITHDRAWAL"/><label for="status3">Retrait</label></li>
  <input type="hidden" name="_status" value="on"/>
</ul>

8. Enfin

Cette fois, j'ai expliqué comment afficher facilement les zones de liste et les cases à cocher à l'aide de l'énumération dans JSP. Avec cette méthode, même si vous modifiez la définition d'énumération, ni JSP ni Form ne doivent être modifiés. Il est nécessaire de prendre des mesures pour définir la méthode getName () lors de la définition de l'énumération, mais j'ai pu facilement lier la valeur d'entrée du formulaire à l'énumération sans implémenter de traitement spécial. Essayez également d'utiliser enum sur JSP.

Recommended Posts

Un moyen très simple d'utiliser enum avec JSP
Un moyen simple de créer des balises personnalisées JSP
[Rails] Comment utiliser enum
[Rails] Comment utiliser enum
Array.map facile à utiliser (&: méthode)
Comment utiliser scope (JSP & Servlet)
La fonction est très facile à utiliser
[Rails] Un moyen simple de vérifier les colonnes
Comment utiliser mssql-tools avec Alpine
Facile à utiliser Cloud Firestore (Android)
Comment utiliser le type enum Java
Un moyen facile de créer votre propre logo d'application (facile avec votre smartphone)
Un moyen simple de définir les icônes des applications iOS
Comment brouiller l'image (super facile)
Comment utiliser BootStrap avec Play Framework
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Utiliser les balises JSP Spring Security avec FreeMarker
[Rails] Enum est plus facile à utiliser! Énumélisez!
Facile à parcourir avec les expressions régulières Java
Comment utiliser ToolBar avec la super marge Part1 Définir les caractères et changer les couleurs
Rendez Firebase Analytics simple et facile à utiliser avec les modèles Singleton et Builder
Comment utiliser le mémo personnel codable de Swift
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Un moyen simple de créer une implémentation de java.util.stream.Stream
Comment utiliser h2db intégré avec Spring Boot
Vous utilisez le contexte pour utiliser MDC avec Spring WebFlux
Comment utiliser le framework Java avec AWS Lambda! ??
Remarquez comment utiliser Swift Super Basic TableView
Je veux utiliser java8 forEach avec index
Comment utiliser l'API Java avec des expressions lambda
Comment utiliser le protocole NFS version 2 avec Ubuntu 18.04
Facile à créer LINE BOT avec Java Servlet
[Pour les super débutants] Comment utiliser l'autofocus: vrai
Facile à afficher Hello World avec Rails + Docker
Lors de l'importation de CSV avec Rails, il était vraiment facile d'utiliser la commande nkf
Comment utiliser Oracle JDK 9 EA avec Travis CI
Compte tenu de l'éditeur de propriétés utilisé dans SpringToolSuite (STS)
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
Si vous souhaitez utiliser Mockito avec Kotlin, utilisez mockito-kotlin
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment utiliser GitHub pour les super débutants (développement d'équipe)