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).
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.
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.
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 foisstatus Sera. |
items |
Spécifiez la collection ou le tableau qui stocke les données à afficher dans la zone de liste. Ici d'énumération value() 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 3 Status J'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 fois delabel フィールドを表示したいdeでlabel Est spécifié. |
itemValue |
Spécifiez le champ à utiliser pour la valeur de la zone de liste.code Je veux, mais iciname Le point est de préciser.Puisque le getter sera appelé lors du rendu, ★ défini au point 1 getName() La méthode sera appelée. |
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. ** **
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>
.
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>
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