English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Prima di tutto, introduzione
1.1, Cos'è la verifica di input? Perché è necessaria la verifica di input?
Nell'articolo precedente, abbiamo imparato la conversione dei tipi di dati, abbiamo menzionato due metodi di elaborazione dei dati di livello di rappresentazione e abbiamo menzionato che i dati di input dell'utente devono essere convertiti in tipo per ottenere i dati che vogliamo. Allora, come possiamo determinare che i dati dopo la conversione di tipo sono i dati che vogliamo? Questo è un po' ingarbugliato. Puoi pensare così: l'età di un uomo adulto è 18 anni, ora vuoi ottenere il dato 18, ma l'utente inserisce 32, la conversione di tipo è corretta, ma i dati non sono quelli che vuoi. In questo caso, cosa dobbiamo fare? Quindi la verifica di input è utile qui.
Il rapporto tra la conversione di tipo e la verifica di input è che la conversione di tipo è il presupposto della verifica di input. Se la conversione di tipo fallisce, non c'è bisogno di eseguire ulteriormente la verifica di input. Tuttavia, spesso la conversione di tipo e la verifica di input vengono eseguite contemporaneamente.
Ci sono due tipi di verifica di input:
1、Verifica del client;
2、Verifica del server. Qui si spiega principalmente la verifica del server (riscrittura del metodo ValidateXxx e verifica del file di configurazione xml)
1.2、Riscrivere il flusso di verifica del metodo ValidateXxx
1、Il convertitore di tipo è responsabile della conversione dei parametri di richiesta di stringa e di impostare questi valori come attributi dell'azione
2、Durante il processo di conversione di tipo possono verificarsi eccezioni. Se si verificano eccezioni, le informazioni di eccezione vengono salvate automaticamente nel ActionContext, e l'intercettore conversionError è responsabile di impacchettarli in fieldError
3、Chiamare il metodo ValidateXxx() tramite reflection, dove Xxx è il nome del metodo di logica di elaborazione delle richieste dell'utente che verrà trattato
4、Chiamare il metodo Validate della classe Action
5、Se non si verifica alcun fieldError nei passaggi precedenti, verrà chiamato il metodo di elaborazione delle richieste dell'azione. Se si verifica fieldError, il sistema passerà alla vista specificata dalla logica di input della vista input.
Secondo, verifica degli input
2.1, Le due modalità di verifica degli input che vengono illustrate qui sono:
1, Riscrivo il metodo Validate o creo un metodo ValidateXxx personalizzato (dove Xxx è un nome definito da noi, questo metodo viene eseguito prima del metodo Validate)
2, Creo un xml per la verifica
2.2, Riscrivo il metodo Validate
In un framework MVC, viene fornita una sezione standard di verifica dei dati, Struts2 fornisce un metodo Validate, possiamo sovrascrivere il metodo Validate per effettuare la verifica degli input, ma ci sono due punti da sapere: 1, il metodo Validate viene eseguito prima del metodo execute; 2, il metodo Validate esegue le regole di verifica per tutti gli Action, per distinguere un Action specifico, possiamo utilizzare il metodo ValidateXxx.
Attenzione: gli esempi seguenti sono esempi di utilizzo congiunto di conversione di tipo locale e verifica di input.
Esempio semplice di verifica di registrazione:
Creo la classe entità User:
Utente
Creo la vista: 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>Registrazione utente</title> </head> <body> <h2>Verifica con il metodo validateXXX()</h2> <form action="register_test"> Utente:<input type="text" name="user"><br/> Password:<input type="password" name="user"><br/> Password:<input type="password" name="user"><br/> <input type="submit" value="Invia"> </form> </body> </html>
Creo la classe RegisterAction che estende ActionSupport
package com.validatexxx; import com.opensymphony.xwork2.ActionSupport; //Riscrivo validate() e validateXXX per la verifica /* * Nella configurazione struts.xml il metodo method è impostato su test(), verrà chiamato prima il metodo ValidateTest(), * Poi viene chiamato il metodo validate * Dopo di ciò viene chiamato il metodo test /* */ 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("Riscrivo il metodo Validate"); 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())) { //Quando il FieldError contiene dati, il server ci aiuta automaticamente a saltare al logical view di input this.addFieldError("repassword", "repassword should be same password"); } } //1 public void validateTest(){ System.out.println("Metodo di verifica personalizzato: ValidateTest"); } //3 public String test(){ System.out.println("test: metodo"); return SUCCESS; } }
Attenzione: qui l'attributo è User, quindi il nome dei parametri nella tua pagina jsp deve essere l'istanza user, e devi anche creare un convertitore di tipo che restituisca una classe con dati riempiti
Creare il file struts.xml e conservarlo in WEB-INF/classes/struts.xml
Attenzione: qui il metodo deve essere il tuo metodo ValudateXxx() personalizzato, in questo esempio è test. Se si utilizza *, struts2 deve essere configurato con strict-method-invocation="false", si dice che sia dovuto alla versione troppo alta, che ha aumentato la sicurezza, quindi è obbligatorio aggiungerlo per poterlo utilizzare*
Creare la classe Usertypeconverter che estende StrutsTypeConverter (creare un convertitore di tipo)
package com.validatexxx; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; //Classe per la conversione di tipo public class Usertypeconverter extends StrutsTypeConverter { @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { System.out.println("Usertypeconverter: conversione di tipo!"); 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()+"!"; } }
Attenzione: dopo aver creato il convertitore di tipo, è necessario creare anche un RegisterAction-conversion.properties, posizionato nella stessa directory.
Il contenuto del file è il seguente:
Alla destra è il nome dell'attributo in RegisterAction, alla sinistra è il percorso del convertitore di tipo.
Nuovo view di successo: success.jsp
success.jsp
Nuovo view di errore: input.jsp
input.jsp
L'effetto di esecuzione del codice di successo è il seguente:
Pagina Register.jsp
La pagina di reindirizzamento di successo è: success.jsp
Risultato del test sulla console:
I dati vengono saltati a Usertypeconverter per la conversione di tipo, poi saltano a RegisterAction, eseguono il metodo ValidateTest(), Validate, test, poi restituiscono SUCCESS e poi eseguono la vista del risultato.
Vediamo l'ordine di esecuzione del codice che ha fallito:
Pagina Register.jsp
Pagina input.jsp
Effetto del test sulla console:
Nel metodo Validate, l'autore ha scritto il codice: this.addFieldError(), come è stato spiegato in precedenza, se si aggiunge un errore, il server ci aiuterà automaticamente a saltare all'interfaccia di errore. Restituirà input, e input è configurato in struts.xml, quindi tornerà all'interfaccia input.jsp.
2.3, Nuovo xml per la validazione dell'input
Nuovo interfaccia di visualizzazione: 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>Verifica utilizzando XML</title> </head> <body> <s:form action="empinfo" method="post"> <s:textfield name="name" label="Nome" size="20" /> <s:textfield name="age" label="Età" size="20" /> <s:submit name="submit" label="Invia" align="center" /> </s:form> </body> </html>
Crea una classe Employee che estende ActionSupport
Questa classe utilizza la sovrascrittura del metodo Validate e la configurazione Xml, possiamo scegliere uno di essi per la verifica.
package com.validatexxx; import com.opensymphony.xwork2.ActionSupport; //Utilizza il metodo validate() per la verifica, questa è una verifica sul lato server! 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; } //Esegui nuovamente il metodo dopo il secondo passo public String esegui() { System.out.println("esegui: " + this.age); return SUCCESS; } /* Utilizzare la convalida del server: riutilizzare il metodo validate(); //Primo passo: eseguire questo metodo //Il riutilizzo del metodo validate ha difetti: viene utilizzato il metodo validate ogni volta, causando un notevole spreco di risorse. public void validate(){ System.out.println("validate"); if (name == null || name.trim().equals("")) { //Quando si aggiunge dati a questo metodo, il server restituisce input e poi si passa alla pagina input.jsp. addFieldError("name","Il nome è obbligatorio"); } if (age < 28 || age > 65) { addFieldError("age","L'età deve essere compresa tra 28 e 65"); } } */ }
Effettuare la configurazione in Struts.xml:
Le pagine success.jsp e input.jsp utilizzano ancora quelle precedenti.
Successivamente dobbiamo creare il file Employee-validation.xml, posizionato nella stessa directory dell'Employee, attenzione: -validation.xml è una parte fissa
Il contenuto è:
<?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> Il nome è obbligatorio. </message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">29</param> <param name="max">64</param> <message> L'età deve essere compresa tra 28 e 65 </message> </field-validator> </field> </validators>
Punto fondamentale: la restrizione dtd del file deve essere presente, altrimenti verrà restituito un errore:
ERROR DefaultDispatcherErrorHandler Eccezione verificatasi durante l'elaborazione della richiesta: [Tempo di connessione scaduto: connect - [ubicazione sconosciuta], null]
Quindi utilizzeremohttp://localhost:8080/LearStruts2/ValidateJSP/Test.jspeffettuare l'accesso.
Test superato:
Interfaccia Test.jsp:
success.jsp
Esempio di test fallito:
Interfaccia input.jsp:
La spiegazione dell'esempio è corretta.
In realtà, ci sono molti validatori integrati in Struts2: validator di obbligo, validator di stringa obbligatoria, validator di intero, validator di data, validator di espressione, validator di lunghezza di carattere, validator di espressione regolare... ecc. Se necessario, l'autore spiegherà uno per uno.
L'articolo sopra menzionato è una spiegazione dettagliata del tutorial di validazione degli input di Struts2 fornita dall'autore, sperando che sia utile a tutti. Se avete qualsiasi domanda, lasciate un commento e l'autore risponderà prontamente. In questo senso, ringraziamo anche tutti i sostenitori del sito di tutorial di urla!
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta agli autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.