Im Gegensatz zu Konstanten ist Java Enum typsicher und ein praktischer Datentyp, der mehrere Daten enthalten kann. Daher können Sie den Code wie Master und seine Bedeutung gemeinsam definieren. Dieses Mal möchte ich erklären, wie Listenfelder und Kontrollkästchen mithilfe der Aufzählung in JSP einfach angezeigt werden können. Web-Apps basieren auf Spring-Boot (Spring MVC, TERASOLUNA 5.x).
Definieren Sie die in diesem Beispiel verwendete Aufzählung. Ich habe eine Aufzählung mit den Daten des "Code" -Felds von int und des "Label" -Felds erstellt, die angezeigt werden sollen. Wenn Sie lombok nicht verwenden, definieren Sie auch den Konstruktor und den Setter explizit.
Status.java
package com.example.demo;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum Status {
APPROVAL(1, "Die Genehmigung"),
DENIAL(2, "Verweigerung"),
WITHDRAWAL(3, "Rückzug");
int code;
String label;
//★ Punkt 1
public String getName() {
return name();
}
}
** ★ Punkt 1 ** enum hat eine Methode namens "name ()", aber wir möchten als Getter darauf zugreifen, also definieren wir eine umschlossene "getName ()" -Methode. Dies ist eine Maßnahme zur Verwendung von Enum mit JSP.
Definiert eine Formularklasse, in der die eingegebenen Daten gespeichert werden.
DemoForm.java
public class DemoForm implements Serializable {
//★ Punkt 2
@NotNull
Status status;
// ommited
}
** ★ Punkt 2 ** Definieren Sie die definierte Aufzählung so wie sie ist als Feld. Sie müssen es nicht im int-Code oder im String-Label erhalten. Da enum ein Datentyp ist, lautet dieses Feld immer "Status". Da ich es zu einem erforderlichen Element machen möchte, habe ich die Annotation "@ NotNull" der Bean-Validierung hinzugefügt.
Erstellen Sie eine JSP, die ein Listenfeld mit Aufzählung ausgibt. Darum geht es in diesem Artikel.
Verwenden Sie die Standard-JSP-Funktionen und Federfunktionen (<form: xxx />
ist das Feder-Tag).
JSP, die ein Listenfeld mit Aufzählung ausgibt
<%--★ Punkt 3--%>
<%@ page import="com.example.demo.Status" %>
...Kürzung...
<%--★ Punkt 4--%>
<form:errors path="status"/>
<form:select path="status" items="${Status.values()}" itemLabel="label" itemValue="name" />
** ★ Punkt 3 ** Ich möchte in JSP auf "Status" verweisen, also importiere die Klasse mit "<% @ page import =" fqcn "%>". Ich habe es oft in den Tagen gesehen, als JSP in Scriptlets geschrieben wurde, aber ich sehe es heutzutage nicht viel, aber es ist eine Standardfunktion von JSP.
** ★ Punkt 4 **
Geben Sie das Listenfeld mit dem Tag <form: select />
of spring aus. Da es viele Attribute gibt, wird jedes unten erläutert.
Attribut | Erläuterung |
---|---|
path |
Geben Sie den entsprechenden Feldnamen der Formularklasse an. Diesmalstatus Wird sein. |
items |
Geben Sie die Sammlung oder das Array an, in dem die anzuzeigenden Daten im Listenfeld gespeichert sind. Hier von enum value() Der Punkt ist, eine statische Methode aufzurufen. Diese Methode gibt ein Array von Enum zurück.Jetzt können Sie 3 Elemente der Aufzählung anzeigen. ★ Bei Punkt 3 Status Ich habe dies importiert, um diese statische Methode aufzurufen. |
itemLabel |
Geben Sie das Feld an, das für das Anzeigeelement des Listenfelds verwendet werden soll.Diesmal Status vonlabel フィールドを表示したいvonでlabel Angegeben. |
itemValue |
Geben Sie das Feld an, das für den Wert des Listenfelds verwendet werden soll.code Ich möchte, aber hiername Der Punkt ist zu spezifizieren.Da der Getter beim Rendern aufgerufen wird, ★ definiert in Punkt 1 getName() Die Methode wird aufgerufen. |
Der HTML-Code des Ausgabelistenfelds wird unten angezeigt.
Das value
-Attribut von <option>
wird auf name
von enum gesetzt, und das Anzeigeelement wird auf label
gesetzt.
Wenn value
mit dem in Status
enum definierten name
übereinstimmt, kann er ohne besondere Verarbeitung an die Form-Klasse gebunden werden.
HTML ausgeben (Zeilenumbrüche zur besseren Lesbarkeit hinzufügen)
<select id="status" name="status">
<option value="APPROVAL">Die Genehmigung</option>
<option value="DENIAL">Verweigerung</option>
<option value="WITHDRAWAL">Rückzug</option>
</select>
Wenn Sie value
auf einen Wert setzen, der nicht in enum definiert ist (hier HOGE
), tritt ein Typ-Mismatch-Fehler auf, wie unten gezeigt.
Dies tritt auf, wenn das HTML-Formular manipuliert und ein ungültiger Wert für den Wert festgelegt wird oder wenn das Feld "Code" bei Punkt 4 fälschlicherweise auf "itemValue" gesetzt wird.
Wenn eine HTTP-Anforderung mit einem Wert erfolgt, der nicht konvertiert werden kann
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
** Wie Sie der bisherigen Erläuterung entnehmen können, wird bei Verwendung von enum in JSP der Typ "safe of enum" angewendet, wenn er in Form festgelegt wird, ohne eine spezielle Eingabeprüfung vorzubereiten. ** ** **
Ändern Sie die Formularklasse in ein Array, damit Sie mehrere Formulare auswählen können.
DemoForm.java
public class DemoForm implements Serializable {
@NotNull
@Size(min = 1, max = 3)
Status[] status;
// ommited
}
Ich habe bei der Ausgabe des Listenfelds das Tag "<form: select />" verwendet, für das Kontrollkästchen jedoch das Tag "<form: checkboxes />". Bitte beachten Sie, dass es auch ein "<form: checkbox />" -Tag gibt, das ein Kontrollkästchen ausgibt.
JSP, die ein Kontrollkästchen mit Aufzählung ausgibt
<%--★ Punkt 5--%>
<form:errors path="status"/>
<ul>
<form:checkboxes path="status" items="${Status.values()}"
itemLabel="label" itemValue="name" element="li" />
</ul>
** ★ Punkt 5 ** Beschreibt das Attribut "Element", das sich vom Listenfeld unterscheidet. Legen Sie dies fest, wenn Sie das HTML-Element angeben möchten, das das Ausgabe-Kontrollkästchen umschließt. Dieses Mal habe ich "li" so eingestellt, dass es mit
Das HTML des Kontrollkästchens für die Ausgabe wird unten angezeigt.
Das Eingabefeld für das Kontrollkästchen wird in ein <li>
-Tag eingeschlossen.
HTML ausgeben (Zeilenumbrüche zur besseren Lesbarkeit hinzufügen)
<ul>
<li><input id="status1" name="status" type="checkbox" value="APPROVAL"/><label for="status1">Die Genehmigung</label></li>
<li><input id="status2" name="status" type="checkbox" value="DENIAL"/><label for="status2">Verweigerung</label></li>
<li><input id="status3" name="status" type="checkbox" value="WITHDRAWAL"/><label for="status3">Rückzug</label></li>
<input type="hidden" name="_status" value="on"/>
</ul>
Dieses Mal habe ich erklärt, wie Listenfelder und Kontrollkästchen mithilfe der Aufzählung in JSP einfach angezeigt werden können. Selbst wenn Sie mit dieser Methode die Definition von enum ändern, müssen weder JSP noch Form geändert werden. Es ist notwendig, Maßnahmen zu ergreifen, um die Methode "getName ()" zu definieren, wenn die Aufzählung definiert wird, aber ich konnte den Eingabewert des Formulars problemlos an die Aufzählung binden, ohne eine spezielle Verarbeitung zu implementieren. Bitte versuchen Sie auch, enum bei JSP zu verwenden.
Recommended Posts