English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Struts2Detaillierte Erklärung der Dateneingabevalidierung

1. Einleitung

1.1Was ist Eingabevalidierung? Warum ist Eingabevalidierung erforderlich?

In dem letzten Artikel haben wir die Datentypumwandlung gelernt, wir haben die zwei Methoden der Datenverarbeitungsebene erwähnt und auch darauf hingewiesen, dass die Benutzerinputdaten umgewandelt werden müssen, um die gewünschten Daten zu erhalten, wie können wir sicherstellen, dass die umgewandelten Daten die gewünschten Daten sind? Das ist etwas verwirrend. Man kann sich so vorstellen: Das Alter eines erwachsenen Mannes ist18Alter, du möchtest jetzt erhalten18Diese Daten, aber, die Eingabe des Benutzers32Die Daten sind nach der Typumwandlung auch korrekt, aber die Daten sind nicht das, was du willst. Was tun wir in diesem Fall? Daher ist die Eingabevalidierung hier nützlich.

Das Verhältnis zwischen Typumwandlung und Eingabevalidierung ist: Die Typumwandlung ist die Voraussetzung für die Eingabevalidierung, wenn die Typumwandlung fehlschlägt, ist keine weitere Eingabevalidierung erforderlich. Aber oft werden Typumwandlung und Eingabevalidierung gleichzeitig durchgeführt.

Es gibt zwei Arten von Eingabevalidierung:

1Clientseitige Validierung;

2Serverseitige Validierung. Hier wird hauptsächlich die serverseitige Validierung (Überschreiben der Methode ValidateXxx und Validierung der XML-Konfigurationsdatei) erläutert

1.2Die Validierungsablaufmethode ValidateXxx wird überschrieben

1Der Typumwandler ist verantwortlich für die Typumwandlung der Anfrageparameter als Zeichenkette und setzt diese Werte als Attributwerte des Actions

2During the execution of type conversion, exceptions may occur, if an exception occurs, the exception information will be automatically saved to the ActionContext, and the conversionError interceptor is responsible for encapsulating it into fieldError

3Call the ValidateXxx() method through reflection, where Xxx is the method name corresponding to the handling logic of the user request to be processed

4Call the Validate method of the Action class

5If the above steps do not appear fieldError, the handling method of the user request in the Action will be called, if fieldError appears, the system will switch to the view specified by the input logic view.

Second, input validation

2.1There are two ways to explain input validation here:

1Rewrite the Validate method or create a custom ValidateXxx method (where Xxx is a name defined by yourself, this method will be executed first, followed by the Validate method)

2Create a new xml for validation

2.2Rewrite the Validate method

In the MVC framework, there will be a standardized data validation part provided, Struts2Here we provide a Validate method, by rewriting the Validate method we can perform input validation, but there are two points to know when rewriting the Validate method:1Validate method will be executed before the execute method;2Validate method will execute validation rules for all Actions, in order to distinguish a certain Action, we can use ValidateXxx method.

Note: The following example is an example of using local type conversion and input validation together.

A simple registration verification example:

Create an entity class User:

 User

Create a view: Register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8>
<title>Register User</title>
</head>
<body>
  <h2>Validate using the validateXXX() method</h2>
  <form action="register_test">
    User: <input type="text" name="user"><br/>
    Password: <input type="password" name="user"><br/>
    Password: <input type="password" name="user"><br/>
    <input type="submit" value="Submit">
  </form> 
</body>
</html>

Create a RegisterAction class that inherits from ActionSupport

package com.validatexxx;
import com.opensymphony.xwork2.ActionSupport;
//Rewrite the validate() and validateXXX specified methods for verification
/*
 * In the struts.xml configuration, the method method is set to test(), the ValidateTest() method will be called first
 * Then the validate method is called
 * After the test method is called
 * */
public class RegisterAction extends ActionSupport {
  private User user;
  public User getUser() {
    return user;
  }
  public void setUser(User user) {
    this.user = user;
  }
  //2
  @Override 
  public void validate(){   
   System.out.println("Überladene Validate-Methode");
   if (null == user.getPassword() || "".equals(user.getPassword()) || null == user.getRepassword() || "".equals(user.getRepassword())) { 
       this.addFieldError("repassword", "repassword should be same password"); 
      return; 
     } 
   if (!user.getPassword().equals(user.getRepassword())) { 
     //Wenn Daten im FieldError existieren, springt der Server automatisch zu der logischen Ansicht input
     this.addFieldError("repassword", "repassword should be same password"); 
     } 
  }
  //1
  public void validateTest(){
    System.out.println("Benutzerdefinierte Validierungsmethode: ValidateTest");
  }
  //3
  public String test(){
    System.out.println("test:Methode");
    return SUCCESS;
  }
}

Hinweis: Hier ist das Attribut User, daher müssen Sie den Namen des Parameters auf der JSP-Seite als den Namen des Beispiels user schreiben, und Sie müssen auch einen Typenkonverter erstellen, der eine mit Daten gefüllte Klasse zurückgibt

Erstellen Sie struts.xml und speichern Sie ihn im WEB-INF/classes/struts.xml

Hinweis: Hier muss das method das ValudateXxx() Methode sein, die Sie selbst definiert haben, der Autor hier ist test. Verwenden*falls nicht, struts2strict muss ebenfalls konfiguriert werden-method-invocation="false", angeblich weil die Version zu hoch ist, die Sicherheit wurde erhöht, daher muss sie hinzugefügt werden, um sie verwenden zu können*

Erstellen Sie die Klasse Usertypeconverter, die von StrutsTypeConverter erbt (erstellen Sie einen Typenkonverter)

package com.validatexxx;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
//Typkonvertierungsklasse
public class Usertypeconverter extends StrutsTypeConverter {
  @Override
  public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
    System.out.println("Usertypeconverter:类型转换!");
    User user = new User();
    user.setUsername(arg1[0]);
    user.setPassword(arg1[1]);
    user.setRepassword(arg1[2]);
    return user;
  }
  @Override
  public String convertToString(Map arg0, Object arg1) {
    User u = (User)arg1;
    return u.getUsername();+"!";
  }
}

Hinweis: Nach der Erstellung des Typkonverters muss noch eine RegisterAction erstellt werden-conversion.properties, im gleichen Verzeichnis abgelegt

Der Inhalt der Datei ist:

Vorher ist der Attributname in RegisterAction, dahinter ist der spezifische Pfad des Typkonverters.

 Neue Erfolgsansicht: success.jsp

 success.jsp

Neue Fehleransicht: input.jsp

 input.jsp

Der Erfolgseffekt der Codeausführung ist wie folgt:

Register.jsp-Seite 

Die erfolgreich umgeleitete Seite ist: success.jsp

Konsolen-Testergebnis:

Die Daten werden zu Usertypeconverter für die Typkonvertierung weitergeleitet, dann zu RegisterAction, um die Methode ValidateTest() auszuführen, Validate und test, dann wird SUCCESS zurückgegeben und die Ansicht des results ausgeführt.

Wir schauen uns die Reihenfolge des Codeausführungsfehlers an:

Register.jsp-Seite

input.jsp-Seite

Konsolen-Testeffekt:

In der Methode Validate gibt der Autor folgendes Code: this.addFieldError(), wie bereits erwähnt wurde, wird der Server uns automatisch zu der Fehleransicht weiterleiten, wenn ein Fehler hinzugefügt wird. Es wird input zurückgegeben, und input ist in struts.xml konfiguriert, daher wird zur input.jsp-Ansicht zurückgegangen.

2.3、新建xml进行输入验证

Erstellen Sie die Ansicht: Test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8>
<title>XML-Validierung</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>

Erstellen Sie eine neue Klasse Employee, die ActionSupport erweitert

Diese Klasse verwendet sowohl die Methode Validate überschreiben als auch die Xml-Konfiguration, wir können eine davon auswählen, um zu überprüfen

package com.validatexxx;
import com.opensymphony.xwork2.ActionSupport;
//Verwenden Sie die Methode validate() zur Überprüfung, dies ist eine Serverseitige Überprüfung!
public class Employee extends ActionSupport {
  private String name;
  private int age;
  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 String execute(){
    System.out.println("execute:"+this.age);
    return SUCCESS;
  }
/*  使用服务端的校验:重写validate方法();
  //第一步先执行该方法
  //重写validate方法有缺陷:每次都会使用validate方法验证,造成极大的资源浪费。
  public void validate(){
    System.out.println("validate");
     if (name == null || name.trim().equals(""))
     {
       //当往该方法添加数据的时候,服务器会返回input,之后跳转到input.jsp页面中。
       addFieldError("name","The name is required");
     } 
     if (age < 28 || age > 65)
     {
       addFieldError("age","Age must be in between 28 und 65");
      }
  }
*/
}

在Struts.xml中进行配置:

这里的success.jsp和input.jsp还是使用上面的。

之后我们需要新建Employee-validation.xml,路径放在与Employee同级目录下,注意:-validation.xml是固定不变的

内容为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
    "-//Apache Struts//XWork Validator 1.0.3//EN" 
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.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>
      Das Alter muss zwischen 28 und 65
     </message>
   </field-validator>
  </field>
</validators>

Wichtig: Die.dtd-Beschränkung dieses Dokuments muss vorhanden sein, andernfalls wird ein Fehler zurückgegeben:

FEHLER DefaultDispatcherErrorHandler Es ist während der Verarbeitung der Anfrage ein Ausnahmevorgang aufgetreten: [Verbindungszeitüberschreitung: verbinden - [Unbekannte Position], null]


Nun verwenden wirhttp://localhost:8080/LearStruts2/ValidateJSP/Test.jspzugreifen.

Test erfolgreich:

Test.jsp Oberfläche:

success.jsp

Fehlgeschlagener Testbeispiel:

input.jsp Oberfläche:

Die Beispielanweisung ist korrekt.

Tatsächlich in Struts2Es gibt mehrere integrierte Validierer: Erforderliche Validierung, Erforderliche Zeichenfolgenvalidierung, Ganzzahlnvalidierung, Datumsvalidierung, Ausdrucksvalidierung, Zeichenlängevalidierung, regulärer Ausdrucksvalidierung und so weiter. Wenn erforderlich, werde ich diese alle nacheinander erläutern.

Hier ist eine Einführung in Struts, die ich Ihnen von den Redakteuren vorgestellt habe2Detaillierte Erklärung der Datenvalidierung: Ich hoffe, dies hilft Ihnen weiter. Wenn Sie Fragen haben, hinterlassen Sie bitte einen Kommentar, und ich werde schnell antworten. Ich möchte auch allen danken, die die Unterstützung der Anleitung website gewährt haben!

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetnutzern selbstständig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie verdächtige urheberrechtliche Inhalte entdecken, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @ beim Senden einer E-Mail, um eine Beschwerde einzureichen und relevante Beweise bereitzustellen. Sobald die Beschwerde bestätigt wird, wird diese Website den verdächtigen Inhalten sofort löschen.)

Gefällt mir