[JAVA] Ich möchte den Rahmen des Textfelds rot machen, wenn ein Eingabefehler auftritt

Einführung

Ich habe versucht, den Rahmen des Textfelds rot zu machen, als ein Eingabefehler auftrat, aber es fiel mir schwer, ihn zu implementieren, daher werde ich ihn veröffentlichen.

Umgebung

OS: macOS Catalina 10.15.6 JDK:14.0.1 Spring Boot 2.3.3 jquery 3.3.1-1 bootstrap 4.2.1

① Bei der Überprüfung der Eingabe

Bei der Durchführung der Eingabeprüfung (Validierung) hat der Autor die Klasse wie folgt erstellt.

■ Controller-Klasse

SignupController.java


package com.example.demo.login.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

import com.example.demo.login.domain.model.GroupOrder;
import com.example.demo.login.domain.model.SignupForm;
import com.example.demo.login.domain.model.User;
import com.example.demo.login.domain.service.UserService;

//Controller für die Registrierung neuer Benutzer
@Controller
public class SignupController {

	@Autowired
	private UserService userService;

	//Übergang zum Benutzerregistrierungsbildschirm
	@PostMapping("/signup")
	public String postSignUp(@ModelAttribute SignupForm form, Model model) {

		return "signup/signup";
	}

	//Methode zum Ausführen der Registrierung neuer Benutzer
	@PostMapping("/signupUser") //Führen Sie die Validierung in der unter "Gruppenreihenfolge" festgelegten Reihenfolge durch.
	public String postSignUp(@ModelAttribute @Validated(GroupOrder.class) SignupForm form, BindingResult bindingResult, Model model) {

		//Bindungsfehler(Einschließlich Validierungsfehler)Wenn Sie dies tun, wechselt der Bildschirm zum Benutzerregistrierungsbildschirm.
		if (bindingResult.hasErrors()) {
			return postSignUp(form, model);

		}

		//Neu registrierten Inhalt auf der Konsole anzeigen
		System.out.println(form);

		//Erstellen einer Benutzerinstanz
		User user = new User();

		//Legen Sie den im Registrierungsformular eingegebenen Inhalt in der Benutzerklasse fest
		user.setUserId(form.getUserId());
		user.setMailAddress(form.getMailAddress());
		user.setPassword(form.getPassword());

		//Wirf die Verarbeitung mit "Benutzer" in die Serviceklasse, wodurch der Inhalt der Formulareingabe als Argument festgelegt wird
		boolean result = userService.insertOne(user);

		//Zeigen Sie das Ausführungsergebnis der Registrierungsarbeiten auf der Konsole an
		if (result == true) {
			System.out.println("Erfolg einfügen");
		} else {
			System.out.println("Einfügen fehlgeschlagen");
		}

		//Übergang zum Anmeldebildschirm
		return "redirect:/login";

	}

}

■ Validierungsgruppe

GroupOrder.java


package com.example.demo.login.domain.model;

import javax.validation.GroupSequence;

//Führen Sie die Validierung in der Reihenfolge "Gültige Gruppe 1" und "Gültige Gruppe 2" aus, wenn Sie einen neuen Benutzer registrieren und die Benutzerregistrierungsinformationen aktualisieren.
@GroupSequence({ValidGroup1.class, ValidGroup2.class})
public interface GroupOrder {


}

ValidGroup1.java


package com.example.demo.login.domain.model;

//ValidGroup1-Schnittstelle
public interface ValidGroup1 {

}

ValidGroup2.java


package com.example.demo.login.domain.model;

//ValidGroup2-Schnittstelle
public interface ValidGroup2 {

}

■ Formularklasse eingeben

SignupForm.java



package com.example.demo.login.domain.model;


import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.Length;

import lombok.Data;


//Anmeldeformular, das im Registrierungsformular für neue Benutzer verwendet wird
@Data
public class SignupForm {

	/*
	 *null Leerzeichen halber Breite Ein Fehler tritt auf, wenn das Zeichen leer ist(Als gültige Gruppe 1 eingestuft)
	 *3 bis 20 Zeichen(Als gültige Gruppe 2 eingestuft)
	 */
	@NotBlank(groups = ValidGroup1.class)
	@Length(min = 3, max = 20, groups = ValidGroup2.class)
	private String userId;

	/*
	 *null Leerzeichen halber Breite Ein Fehler tritt auf, wenn das Zeichen leer ist(Als gültige Gruppe 1 eingestuft)
	 *Ein Fehler tritt auf, wenn das Format nicht die E-Mail-Adresse ist(Als gültige Gruppe 2 eingestuft)
	 */
	@NotBlank(groups = ValidGroup1.class)
	@Email(groups = ValidGroup2.class)
	private String mailAddress;

	/*
	 *null Leerzeichen halber Breite Ein Fehler tritt auf, wenn das Zeichen leer ist(Als gültige Gruppe 1 eingestuft)
	 *3 bis 20 Zeichen(Als gültige Gruppe 2 eingestuft)
	 *Nur Alphabet(Als gültige Gruppe 2 eingestuft)
	 */
	@NotBlank(groups = ValidGroup1.class)
	@Length(min = 3, max = 20, groups = ValidGroup2.class)
	@Pattern(regexp = "^[a-zA-Z0-9]+$", groups = ValidGroup2.class)
	private String password;

}

■ Fehlermeldung

messages.properties


#Validierungsfehlermeldung
signupForm.userId=Benutzeridentifikation
NotBlank.signupForm.userId={0}Bitte eingeben
Length.signupForm.userId={0}Ist{2}Mehr als Briefe{1}Bitte geben Sie unter dem Buchstaben ein

signupForm.mailAddress=Mail Adresse
NotBlank.signupForm.mailAddress={0}Bitte eingeben
Email.signupForm.mailAddress=Bitte geben Sie das E-Mail-Adressformat ein

signupForm.password=
NotBlank.signupForm.password={0}
Length.signupForm.password={0}{2}{1}
Pattern.signupForm.password={0}

searchForm.keyword=Bitte geben Sie mehr als ein Zeichen und weniger als ein Zeichen ein. Bitte geben Sie ein alphanumerisches Zeichen mit halber Breite ein
NotBlank.searchForm.keyword={0}Bitte eingeben

#Passen Sie die Anmeldefehlermeldung an
AbstractUserDetailsAuthenticationProvider.badCredentials=Die Login-ID oder das Passwort ist falsch.

② Erstellung des Eingabeformulars (vor Änderung)

Zunächst habe ich das HTML des Eingabeformulars wie unten gezeigt erstellt.

signup.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
	  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="~{layout/template}">
<head>
	<meta charset="UTF-8"></meta>
    <title>SignUp</title>

</head>
<!--Benutzerregistrierungsbildschirm-->
<body>
    <div layout:fragment="content">
		<div class="col-sm-4 offset-sm-4">
			<div class="page-header">
				<h1>Benutzerregistrierungsbildschirm</h1>
			</div>
			<form method="post" th:action="@{/signupUser}" th:object="${signupForm}">

				<table class="table table-bordered table-hover">
				<tr>
					<td> <!--Wenn im Feld "userId" des Modellobjekts "signupForm" ein Fehler auftritt, wird im Klassenattribut "has" angezeigt-Fügen Sie "Fehler" hinzu und machen Sie den Bereich um das Textfeld rot
-->
						<div class="form-group" th:classappend="${#fields.hasErrors('userId')}?'has-error'">
							<input type="text" class="form-control" placeholder="Anmelde-ID" th:field="*{userId}"/>
							<span class="text-danger"
								th:if="${#fields.hasErrors('userId')}"
								th:errors="*{userId}">
								userId error
							</span>
						</div>
					</td>
				<tr>
				<tr>
					<td> <!--Wenn im Feld "mailAddress" des Modellobjekts "signupForm" ein Fehler auftritt, hat das Klassenattribut "has"-Fügen Sie "Fehler" hinzu und machen Sie den Bereich um das Textfeld rot
-->
						<div class="form-group"
							th:classappend="${#fields.hasErrors('mailAddress')}?'has-error'">
							<input type="text" class="form-control" placeholder="Mail Adresse" th:field="*{mailAddress}"/>
							<span class="text-danger"
								th:if="${#fields.hasErrors('mailAddress')}"
								th:errors="*{mailAddress}">
								mailAddress error
							</span>
						</div>
					</td>
				<tr>
				<tr>
					<td> <!--Wenn im Feld "password" des Modellobjekts "signupForm" ein Fehler auftritt, wird im Klassenattribut "has" angezeigt-Fügen Sie "Fehler" hinzu und machen Sie den Bereich um das Textfeld rot
-->
						<div class="form-group"
							th:classappend="${#fields.hasErrors('password')}?'has-errors'">
							<input type="text" class="form-control" placeholder="Passwort" th:field="*{password}"/>
							<span class="text-danger"
								th:if="${#fields.hasErrors('password')}"
								th:errors="*{password}">
								password error
							</span>
						</div>
					</td>
				<tr>
				</table>
				<button class="btn btn-primary col-sm-6" type="submit">Anmelden</button>
			</form>
		</div>
	</div>
</body>
</html>

Wie im Kommentar in HTML beschrieben, schrieb ich, als in jedem Feld ein Fehler auftrat, dass der Rahmen des Textfelds rot wurde, aber das Ergebnis war, dass der Rahmen nicht rot wurde, wie unten gezeigt.

Übrigens ist "has-error" eine Bootstrap-Klasse, die den Textfeldrahmen rot macht.

スクリーンショット 2020-10-21 13.00.49.png

Als ich das "Bootstrap 4-Migrationshandbuch" überprüfte, gab es die folgende Beschreibung.

** [Änderungen von Bootstrap 3.x] Ändern Sie den Anzeigestil jedes Überprüfungsstatus mithilfe der HTML5-Formularüberprüfungsfunktion in den Stil .has-Warnung, .has-Fehler, .has-Erfolg, .has-Feedback, .form-Control-Feedback sind veraltet Als Fallback können für die serverseitige Validierung .is-ungültige und .is-gültige Klassen anstelle von Pseudoklassen verwendet werden. .was-validiert Keine übergeordnete Klasse erforderlich. ** ** **

URL:https://bootstrap-guide.com/components/forms?

Seit Bootstrap 4 wurde "has-error" abgeschafft und "is-invalid" scheint stattdessen als Funktion bereitgestellt zu werden.

③ Ändern Sie das Eingabeformular

Schreiben Sie in das Eingabe-Tag, nicht in das div-Tag.

signup.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
	  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="~{layout/template}">
<head>
	<meta charset="UTF-8"></meta>
    <title>SignUp</title>

</head>
<!--Benutzerregistrierungsbildschirm-->
<body>
    <div layout:fragment="content">
		<div class="col-sm-4 offset-sm-4">
			<div class="page-header">
				<h1>Benutzerregistrierungsbildschirm</h1>
			</div>
			<form method="post" th:action="@{/signupUser}" th:object="${signupForm}">

				<table class="table table-bordered table-hover">
				<tr>
					<td>
						<div class="form-group">
							<!--Wenn im Feld "userId" des Modellobjekts "signupForm" ein Fehler auftritt, fügen Sie das Klassenattribut hinzu und "is"-Rot um das Textfeld mit "ungültig"-->
							<input type="text" class="form-control" placeholder="Anmelde-ID" th:field="*{userId}"
							th:classappend="${#fields.hasErrors('userId')}?'is-invalid'"/>
							<span class="text-danger"
								th:if="${#fields.hasErrors('userId')}"
								th:errors="*{userId}">
								userId error
							</span>
						</div>
					</td>
				<tr>
				<tr>
					<td>
						<div class="form-group">
							<!--Wenn im Feld "mailAddress" des Modellobjekts "signupForm" ein Fehler auftritt, fügen Sie das Klassenattribut hinzu und "is"-Rot um das Textfeld mit "ungültig"-->
							<input type="text" class="form-control" placeholder="Mail Adresse" th:field="*{mailAddress}"
							th:classappend="${#fields.hasErrors('mailAddress')}?'is-invalid'"/>
							<span class="text-danger"
								th:if="${#fields.hasErrors('mailAddress')}"
								th:errors="*{mailAddress}">
								mailAddress error
							</span>
						</div>
					</td>
				<tr>
				<tr>
					<td>
						<div class="form-group">
							<!--Wenn im Feld "password" des Modellobjekts "signupForm" ein Fehler auftritt, fügen Sie das Klassenattribut hinzu und "is".-Rot um das Textfeld mit "ungültig"-->
							<input type="text" class="form-control" placeholder="Passwort" th:field="*{password}"
							th:classappend="${#fields.hasErrors('password')}?'is-invalid'"/>
							<span class="text-danger"
								th:if="${#fields.hasErrors('password')}"
								th:errors="*{password}">
								password error
							</span>
						</div>
					</td>
				<tr>
				</table>
				<button class="btn btn-primary col-sm-6" type="submit">Anmelden</button>
			</form>
		</div>
	</div>
</body>
</html>

Als ich es ausführte, konnte ich den Rahmen des Textfelds rot machen, wenn ein Eingabefehler auftrat, wie unten gezeigt.

スクリーンショット 2020-10-21 13.28.10.png

Referenz: https://www.e-pokke.com/blog/bootstrap4-invalid-feedback.html https://learning-collection.com/thymeleaf%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/

Recommended Posts

Ich möchte den Rahmen des Textfelds rot machen, wenn ein Eingabefehler auftritt
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
Ich habe versucht, das Problem mit der Ruby-Karaoke-Maschine zu lösen (es gibt ein Beispiel für die Antwort).
Ich habe versucht, das Problem mit dem Ruby-Bonusgetränk zu lösen (es gibt ein Beispiel für die Antwort).
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
Ich möchte die Eingabe begrenzen, indem ich den Zahlenbereich einschränke
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Ich habe versucht, das Problem bei der Erstellung von Ruby-Bingokarten zu lösen (es gibt ein Beispiel für die Antwort).
Ich möchte eine ios.android App machen
[JavaScript] So zeigen Sie eine Warnung an, wenn ein Eingabeformular ausgelassen wurde
Ich möchte die JSP des offenen Portlets bei der Entwicklung von Liferay kennen
[Java] Ich möchte es einfacher machen, weil es schwierig ist, System.out.println einzugeben
Ich möchte den Inhalt der Absicht var_dump
Was ist nach der Installation von 'devise' 'bootstrap' von gemfile with Rails zu tun, wenn url ein Fehler ist?
Wenn der Schwebeflug von Eclipse schwer zu sehen ist
Ich möchte die Antwort der Janken-App wissen
Ich möchte den Namen des Posters des Kommentars anzeigen
Als ich an den 402-Fehler dachte, der plötzlich mitten in der Einführung von PAY.jp auftrat, gab es einen unerwarteten Ort
Auch wenn ich den Inhalt eines Datenobjekts in Java in JSON konvertieren möchte, gibt es einen Zirkelverweis ...
Ich möchte, dass Sie die Geschichte erzählen, dass der Fehler behoben wurde, als Sie das Ladegerät in die Ecke Ihres Kopfes gestochen haben
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Ich möchte herausfinden, welche Java-Version die JAR-Datei hat, die ich habe
Ich habe keine Möglichkeit gefunden, den Fehlercode abzurufen, als ich eine Ausnahme unter Android erhalten habe
Ich habe einen Fehler bekommen! * Es gibt keine interaktive Anforderungsvorlage
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Die Idee, abzuschalten, wenn der Fehler nicht behoben ist
Was ist ein unveränderliches Objekt? [Erklärung, wie man macht]
Ich möchte mehrere Rückgabewerte für das eingegebene Argument zurückgeben
[Ruby] Ich möchte die Reihenfolge der Hash-Tabelle umkehren
Ich möchte die Notwendigkeit des Testens beurteilen, indem ich die Unterschiede der Klassendateien beim Refactoring von Java vergleiche.
Wirf eine Ausnahme und fange, wenn es keinen Handler gibt, der dem Pfad im Frühjahr entspricht
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Möchten Sie wissen, was Ruby n die Potenz von 2 ist? (Machturteil von 2)
Ich habe ein Juwel gemacht, um den Text des Org-Modus in Qiita zu posten
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
Was ich dachte, als ich den Eingabewert des Benutzers an die Service-Klasse übergab
Aufgenommen, weil ich süchtig nach der Standardeingabe der Scannerklasse war
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
Fehler, wenn das in SpringWebFlux verwendete Mitglied der Entity-Klasse endgültig ist
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden
[Schienen] Was tun, wenn das Refile-Bild beim Schreiben der Verarbeitung zum Zeitpunkt des Routing-Fehlers nicht angezeigt wird?
Was tun, wenn die Meldung "Ein Server läuft bereits" angezeigt wird. Fehler beim Versuch, den Rails-Server zu starten