Struts 2 - Validations Framework
In diesem Kapitel werden wir uns eingehender mit dem Validierungsrahmen für Struts befassen. Im Struts-Kern verfügen wir über das Validierungsframework, das die Anwendung beim Ausführen der Regeln zur Durchführung der Validierung unterstützt, bevor die Aktionsmethode ausgeführt wird.
Die clientseitige Validierung erfolgt normalerweise mit Javascript. Man sollte sich jedoch nicht nur auf die clientseitige Validierung verlassen. Die Best Practices empfehlen, die Validierung auf allen Ebenen Ihres Anwendungsframeworks einzuführen. Lassen Sie uns nun zwei Möglichkeiten betrachten, wie Sie unserem Struts-Projekt eine Validierung hinzufügen können.
Hier nehmen wir ein Beispiel für eine Employee deren Name und Alter auf einer einfachen Seite erfasst werden sollen, und wir werden diese beiden Validierungen durchführen, um sicherzustellen, dass der Benutzer immer einen Namen und ein Alter eingibt, die in einem Bereich zwischen 28 und 65 liegen sollten.
Beginnen wir mit der JSP-Hauptseite des Beispiels.
Hauptseite erstellen
Lassen Sie uns die Hauptseite der JSP-Datei schreiben index.jsp, die zum Sammeln der oben genannten mitarbeiterbezogenen Informationen verwendet werden.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Employee Form</title>
</head>
<body>
<s:form action = "empinfo" method = "post">
<s:textfield name = "name" label = "Name" size = "20" />
<s:textfield name = "age" label = "Age" size = "20" />
<s:submit name = "submit" label = "Submit" align="center" />
</s:form>
</body>
</html>
Die index.jsp verwendet das Struts-Tag, das wir noch nicht behandelt haben, aber wir werden sie in Tags-bezogenen Kapiteln untersuchen. Nehmen wir zunächst an, dass das Tag s: textfield ein Eingabefeld und das Tag s: submit eine Schaltfläche zum Senden druckt. Wir haben die Label-Eigenschaft für jedes Tag verwendet, wodurch ein Label für jedes Tag erstellt wird.
Ansichten erstellen
Wir werden die JSP-Datei success.jsp verwenden, die aufgerufen wird, falls eine definierte Aktion SUCCESS zurückgibt.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Success</title>
</head>
<body>
Employee Information is captured successfully.
</body>
</html>
Aktion erstellen
Definieren wir also eine kleine Aktionsklasse Employeeund fügen Sie dann eine Methode mit dem Namen hinzu validate() wie unten in gezeigt Employee.javaDatei. Stellen Sie sicher, dass Ihre Aktionsklasse die erweitertActionSupport Klasse, andernfalls wird Ihre Validierungsmethode nicht ausgeführt.
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Employee extends ActionSupport {
private String name;
private int age;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void validate() {
if (name == null || name.trim().equals("")) {
addFieldError("name","The name is required");
}
if (age < 28 || age > 65) {
addFieldError("age","Age must be in between 28 and 65");
}
}
}
Wie im obigen Beispiel gezeigt, prüft die Validierungsmethode, ob das Feld 'Name' einen Wert hat oder nicht. Wenn kein Wert angegeben wurde, fügen wir einen Feldfehler für das Feld 'Name' mit einer benutzerdefinierten Fehlermeldung hinzu. Zweitens prüfen wir, ob der eingegebene Wert für das Feld 'Alter' zwischen 28 und 65 liegt oder nicht. Wenn diese Bedingung nicht erfüllt ist, fügen wir einen Fehler über dem validierten Feld hinzu.
Konfigurationsdateien
Lassen Sie uns zum Schluss alles mit dem zusammenstellen struts.xml Konfigurationsdatei wie folgt -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "empinfo"
class = "com.tutorialspoint.struts2.Employee"
method = "execute">
<result name = "input">/index.jsp</result>
<result name = "success">/success.jsp</result>
</action>
</package>
</struts>
Es folgt der Inhalt von web.xml Datei -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Klicken Sie nun mit der rechten Maustaste auf den Projektnamen und klicken Sie auf Export > WAR Fileum eine War-Datei zu erstellen. Stellen Sie diese WAR dann im Webanwendungsverzeichnis von Tomcat bereit. Starten Sie abschließend den Tomcat-Server und versuchen Sie, auf die URL zuzugreifenhttp://localhost:8080/HelloWorldStruts2/index.jsp. Daraufhin wird der folgende Bildschirm angezeigt:
Geben Sie jetzt keine erforderlichen Informationen ein, klicken Sie einfach auf SubmitTaste. Sie sehen folgendes Ergebnis:
Geben Sie die erforderlichen Informationen ein, aber geben Sie ein falsches From-Feld ein. Sagen Sie den Namen als "Test" und das Alter als 30 und klicken Sie schließlich auf SubmitTaste. Sie sehen folgendes Ergebnis:
Wie funktioniert diese Validierung?
Wenn der Benutzer die Senden-Taste drückt, führt Struts 2 automatisch die Validierungsmethode aus, und falls eine der “if”In der Methode aufgeführte Anweisungen sind wahr. Struts 2 ruft die addFieldError-Methode auf. Wenn Fehler hinzugefügt wurden, ruft Struts 2 die Ausführungsmethode nicht auf. Vielmehr wird das Struts 2-Framework zurückkehreninput als Ergebnis des Aufrufs der Aktion.
Wenn die Validierung fehlschlägt und Struts 2 zurückkehrt inputDas Struts 2-Framework zeigt die Datei index.jsp erneut an. Da wir Struts 2-Formular-Tags verwendet haben, fügt Struts 2 die Fehlermeldungen automatisch direkt über dem eingereichten Formular hinzu.
Diese Fehlermeldungen haben wir im Methodenaufruf addFieldError angegeben. Die addFieldError-Methode akzeptiert zwei Argumente. Der erste ist derform Der Feldname, für den der Fehler gilt, und der zweite ist die Fehlermeldung, die über diesem Formularfeld angezeigt wird.
addFieldError("name","The name is required");
Um den Rückgabewert von zu behandeln input Wir müssen das folgende Ergebnis zu unserem Aktionsknoten in hinzufügen struts.xml.
<result name = "input">/index.jsp</result>
XML-basierte Validierung
Die zweite Methode zur Validierung besteht darin, eine XML-Datei neben der Aktionsklasse zu platzieren. Die XML-basierte Struts2-Validierung bietet weitere Validierungsoptionen wie E-Mail-Validierung, Ganzzahlbereichsvalidierung, Formularvalidierungsfeld, Ausdrucksvalidierung, Regex-Validierung, erforderliche Validierung, erforderliche String-Validierung, Stringlängen-Validierung usw.
Die XML-Datei muss benannt werden '[action-class]'-validation.xml. In unserem Fall erstellen wir also eine Datei mit dem NamenEmployee-validation.xml mit folgenden Inhalten -
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name = "name">
<field-validator type = "required">
<message>
The name is required.
</message>
</field-validator>
</field>
<field name = "age">
<field-validator type = "int">
<param name = "min">29</param>
<param name = "max">64</param>
<message>
Age must be in between 28 and 65
</message>
</field-validator>
</field>
</validators>
Die oben genannte XML-Datei wird idealerweise zusammen mit der Klassendatei in Ihrem CLASSPATH gespeichert. Lassen Sie uns unsere Mitarbeiter-Aktionsklasse wie folgt haben, ohne sie zu habenvalidate() Methode -
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Employee extends ActionSupport{
private String name;
private int age;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Der Rest des Setups bleibt wie im vorherigen Beispiel erhalten. Wenn Sie nun die Anwendung ausführen, wird das gleiche Ergebnis erzielt, das wir im vorherigen Beispiel erhalten haben.
Der Vorteil einer XML-Datei zum Speichern der Konfiguration ermöglicht die Trennung der Validierung vom Anwendungscode. Sie können einen Entwickler dazu bringen, den Code zu schreiben, und einen Geschäftsanalysten, um die XML-Validierungsdateien zu erstellen. Beachten Sie auch die standardmäßig verfügbaren Validatortypen.
Es gibt viel mehr Validatoren, die standardmäßig mit Struts geliefert werden. Zu den allgemeinen Validatoren gehören der Datumsvalidator, der Regex-Validator und der Stringlängenvalidator. Weitere Informationen finden Sie unter folgendem Link. Struts - XML Based Validators .