Hallo! Dies ist die 4. Serie, die von Grund auf mit Java spielt. Ich habe es gerade genannt.
Klicken Sie hier für Artikel bis zum letzten Mal ↓
Dieses Mal möchte ich der Echo-Anwendung, die ich zuletzt erstellt habe, eine Validierung hinzufügen.
Derzeit können Zeichenfolgen, Zahlen und umgebungsabhängige Zeichen in einer beliebigen Anzahl von Zeichen eingegeben werden. Wenn Sie also ein Phantomdokument senden, wird die Anzeige wie unten gezeigt beschädigt.
erschrocken. Wenn Hatena im Namen aufgereiht ist, entsteht eine störende Atmosphäre. Ist es verstümmelt? Ich mag die Tatsache nicht, dass Zero die Bildschirmbreite durchbrochen hat.
Daher werde ich dieses Mal versuchen, die folgenden Anforderungen zu überprüfen, z. B. den Benutzernamen eines Dienstes. Im Fehlerfall Es handelt sich um ein Bild, bei dem eine Fehlermeldung auf demselben Bildschirm angezeigt wird.
Das fertige Produkt hat die folgende Form. (Die Hintergrundfarbe wurde in eine augenschonende Farbe geändert.)
Die folgenden Anmerkungen wurden der Formularklasse hinzugefügt.
-- @ NotBlank
: Sie können überprüfen, ob es nicht null oder leer ist [^ 1]
-- @ Size
: Sie können die Minimal- und Maximalwerte mit dem Attribut min oder max angeben.
-- @ Pattern
: Sie können die Musterzeichenfolge des regulären Ausdrucks mit dem Attributwert regexp angeben. Diesmal habe ich einen regulären Ausdruck verwendet, der nur alphanumerische Zeichen mit halber Breite zulässt
[^ 1]: Verwenden Sie @NotNull, um nur null zu überprüfen
EchoForm.java
package com.example.form;
import java.io.Serializable;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotBlank;
public class EchoForm implements Serializable {
private static final long serialVersionUID = 1L;
@NotBlank
@Size(min = 4)
@Pattern(regexp = "[a-zA-Z0-9]*") //Muss alphanumerisch sein
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Schreiben Sie nur die modifizierte Echo-Methode. Es gibt zwei Änderungen unten.
argument
hinzugefügt. BindingResult enthält das Ergebnis der Eingabeprüfung. Die Ausführung der Eingabeprüfung und die Generierung von BindingResult sind die Teile, für die das Framework verantwortlich ist, sodass keine Implementierung erforderlich ist. (Aus Einführung in den Frühling)EchoController.java
@RequestMapping(value = "echo", method = RequestMethod.POST)
public String echo(@Validated EchoForm echoForm, BindingResult result, Model model) {
if (result.hasErrors() ) {
model.addAttribute("name", echoForm.getName());
return "index";
}
model.addAttribute("name", echoForm.getName());
return "echo";
}
Ich möchte die Fehlermeldung wie unten gezeigt nur dann rot anzeigen, wenn ein Fehler auftritt ... Dies kann mit Frühling gemacht werden!
Da wir das Formularobjekt bereits beim letzten Mal gebunden haben, können wir die Fehlerinformationen von echoForm abrufen und in Thymeleaf einfügen, um HTML zu erstellen. Der Frühling ist unglaublich. Thymeleaf ist unglaublich.
Es wird nur das Formteil beschrieben.
An der von span umgebenen Stelle wird die Fehlermeldung nur angezeigt, wenn das Objekt fehlerhaft ist [^ 2]. Da die Eigenschaften des Formularobjekts im Attribut th: Errors festgelegt sind, werden nur Fehlermeldungen für die angegebenen Eigenschaften angezeigt.
Wenn mehrere Fehlermeldungen vorliegen, wird automatisch "
" eingegeben. Vielen Dank.
[^ 2]: Ich habe auf die Implementierung von [dieser Seite] verwiesen (https://takeda-san.hatenablog.com/entry/2018/01/18/224244).
index.html
<form th:object="${echoForm}" th:action="@{/echo}" method="POST">
<div>Bitte geben Sie Ihren Benutzernamen ein</div>
<div>(4 oder mehr alphanumerische Zeichen halber Breite)</div>
<div>
<input type="text" th:field="*{name}" />
<button>ich werde schicken</button>
</div>
<span th:if="${#fields.hasErrors('name')}" th:errors="*{name}" style="color: red"></span>
</form>
Wenn Sie die Implementierung bisher ausführen, ist die Fehlermeldung die Standardmeldung (Englisch) der Anmerkung. Der Fehler lautet also wie folgt.
Ich mag das nicht ein wenig ... Das Obige kann immer noch mit einer modischen Fehlermeldung ❤️ übergeben werden, aber die Größenzahl ist für den Benutzer bedeutungslos ... Beheben wir dies auf eine japanische Fehlermeldung!
Es erscheint wünschenswert, Bean Validation-Fehlermeldungen von Spring MVC in der Eigenschaftendatei zu definieren. Es scheint mehrere Methoden zu geben, aber ich habe mich dafür entschieden, weil es leicht zu verstehen war, wie ValidationMessages.properties direkt unter dem Klassenpfad erstellt wird.
Erstellen Sie eine neue ValidationMessages.properties unter Ressourcen.
Der Inhalt ist eine einfache Implementierung, die die Nachricht der verwendeten Anmerkung einfach neu schreibt.
ValidationMessages.properties
org.hibernate.validator.constraints.NotBlank.message=Eingabe ist erforderlich.
javax.validation.constraints.Size.message=Muss mindestens 4 Zeichen lang sein.
javax.validation.constraints.Pattern.message=Es sind nur alphanumerische Zeichen halber Breite gültig.
Übrigens, als ich das Obige gerade in ValidationMessages.properties eingefügt habe, wurde es automatisch wie folgt, indem ich einfach Japanisch eingab und die Eingabetaste drückte ... Da die Standard-Bean of Spring Boot nicht UTF-8 ist, Multibyte Es scheint, dass die Charaktere verstümmelt sind.
ValidationMessages.properties
org.hibernate.validator.constraints.NotBlank.message=\u5165\u529B\u5FC5\u9808\u3067\u3059\u3002
javax.validation.constraints.Size.message=4\u6587\u5B57\u4EE5\u4E0A\u3067\u306A\u304F\u3066\u306F\u3044\u3051\u307E\u305B\u3093\u3002
javax.validation.constraints.Pattern.message=\u534A\u89D2\u82F1\u6570\u306E\u307F\u6709\u52B9\u3067\u3059\u3002
Wie im Kommentarbereich von Qiita hier erwähnt, möglicherweise, weil ich auch ein Spring 2-System und Java 11 oder höher bin, UTF in den Dateieigenschaften Wenn ich es auf -8 gesetzt habe, hat es in der Anwendung gut funktioniert. Klicken Sie einfach mit der rechten Maustaste auf Datei> Eigenschaften> Ressource und ändern Sie die Codierung der Textdatei von Standard auf UTF-8.
Wenn ich jetzt versuche, die Datei zu speichern, wird die folgende Warnung angezeigt, die jedoch mit "Als UTF-8 speichern" einwandfrei funktioniert hat.
Jetzt haben Sie eine japanische Nachricht wie diese!
Dieses Mal hatte ich ein kleines Problem mit der Thymeleaf-Notation des Textadditionsteils zum Zeitpunkt des Fehlers und der japanischen Lokalisierung von ValidationMessages.properties! Die diesmal eingeführte Methode ist verdächtig, wenn es sich um ein Spring 1-System handelt. Überprüfen Sie sie daher gegebenenfalls.
Danke fürs Lesen!
Recommended Posts