Struts 2 - Framework di convalida
In questo capitolo, esamineremo più in profondità il framework di convalida di Struts. Al centro di Struts, abbiamo il framework di convalida che assiste l'applicazione per eseguire le regole per eseguire la convalida prima che il metodo di azione venga eseguito.
La convalida lato client viene solitamente ottenuta utilizzando Javascript. Tuttavia, non si dovrebbe fare affidamento solo sulla convalida lato client. Le migliori pratiche suggeriscono che la convalida dovrebbe essere introdotta a tutti i livelli del framework dell'applicazione. Vediamo ora due modi per aggiungere la convalida al nostro progetto Struts.
Qui, prenderemo un esempio di un file Employee il cui nome ed età dovrebbero essere catturati utilizzando una semplice pagina, e metteremo queste due convalide per assicurarci che l'utente inserisca sempre un nome e un'età che dovrebbero essere compresi tra 28 e 65.
Cominciamo con la pagina JSP principale dell'esempio.
Crea pagina principale
Scriviamo il file JSP della pagina principale index.jsp, che verrà utilizzato per raccogliere le informazioni relative ai dipendenti di cui sopra.
<%@ 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>
Il index.jsp utilizza i tag Struts, che non abbiamo ancora trattato, ma li studieremo nei capitoli relativi ai tag. Ma per ora, supponi che il tag s: textfield stampi un campo di input e che s: submit stampi un pulsante di invio. Abbiamo utilizzato la proprietà label per ogni tag che crea l'etichetta per ogni tag.
Crea viste
Useremo il file JSP success.jsp che verrà richiamato nel caso in cui l'azione definita restituisca SUCCESS.
<%@ 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>
Crea azione
Quindi definiamo una piccola classe di azione Employeee quindi aggiungi un metodo chiamato validate() come mostrato di seguito in Employee.javafile. Assicurati che la tua classe di azione estenda l'estensioneActionSupport class, altrimenti il tuo metodo di validazione non verrà eseguito.
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");
}
}
}
Come mostrato nell'esempio precedente, il metodo di convalida controlla se il campo "Nome" ha un valore o meno. Se non è stato fornito alcun valore, aggiungiamo un errore di campo per il campo "Nome" con un messaggio di errore personalizzato. In secondo luogo, controlliamo se il valore immesso per il campo "Età" è compreso tra 28 e 65 o meno, se questa condizione non soddisfa aggiungiamo un errore sopra il campo convalidato.
File di configurazione
Infine, mettiamo insieme tutto usando il struts.xml file di configurazione come segue -
<?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>
Di seguito è riportato il contenuto di web.xml file -
<?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>
Ora, fai clic con il pulsante destro del mouse sul nome del progetto e fai clic Export > WAR Fileper creare un file War. Quindi distribuire questo WAR nella directory webapps di Tomcat. Infine, avvia il server Tomcat e prova ad accedere all'URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Questo produrrà la seguente schermata:
Ora non inserire le informazioni richieste, basta fare clic su Submitpulsante. Vedrai il seguente risultato:
Inserisci le informazioni richieste ma inserisci un campo Da sbagliato, diciamo il nome come "test" e l'età di 30 anni e infine fare clic su Submitpulsante. Vedrai il seguente risultato:
Come funziona questa convalida?
Quando l'utente preme il pulsante di invio, Struts 2 eseguirà automaticamente il metodo di convalida e se uno qualsiasi dei “if”le istruzioni elencate all'interno del metodo sono vere, Struts 2 chiamerà il suo metodo addFieldError. Se sono stati aggiunti errori, Struts 2 non procederà a chiamare il metodo di esecuzione. Piuttosto il framework Struts 2 torneràinput come risultato della chiamata all'azione.
Quindi, quando la convalida fallisce e Struts 2 ritorna input, il framework Struts 2 visualizzerà nuovamente il file index.jsp. Poiché abbiamo utilizzato i tag del modulo di Struts 2, Struts 2 aggiungerà automaticamente i messaggi di errore appena sopra il modulo archiviato.
Questi messaggi di errore sono quelli che abbiamo specificato nella chiamata al metodo addFieldError. Il metodo addFieldError accetta due argomenti. Il primo è il fileform il nome del campo a cui si applica l'errore e il secondo, è il messaggio di errore da visualizzare sopra quel campo del modulo.
addFieldError("name","The name is required");
Per gestire il valore restituito di input dobbiamo aggiungere il seguente risultato al nostro nodo di azione in struts.xml.
<result name = "input">/index.jsp</result>
Convalida basata su XML
Il secondo metodo per eseguire la convalida consiste nel posizionare un file xml accanto alla classe di azione. La convalida basata su XML di Struts2 fornisce più opzioni di convalida come la convalida della posta elettronica, la convalida dell'intervallo intero, il campo di convalida del modulo, la convalida dell'espressione, la convalida dell'espressione regolare, la convalida richiesta, la convalida della stringa obbligatoria, la convalida della lunghezza della stringa e così via.
Il file xml deve essere denominato '[action-class]'-validation.xml. Quindi, nel nostro caso creiamo un file chiamatoEmployee-validation.xml con i seguenti contenuti -
<!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>
Il file XML sopra sarebbe conservato nel tuo CLASSPATH idealmente insieme al file di classe. Facciamo la nostra classe di azione Employee come segue senza averlavalidate() metodo -
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;
}
}
Il resto della configurazione rimarrà come nell'esempio precedente, ora se eseguirai l'applicazione, produrrà lo stesso risultato che abbiamo ricevuto nell'esempio precedente.
Il vantaggio di avere un file xml per memorizzare la configurazione consente la separazione della validazione dal codice dell'applicazione. Potresti chiedere a uno sviluppatore di scrivere il codice e un analista aziendale per creare i file xml di convalida. Un'altra cosa da notare sono i tipi di validatore che sono disponibili per impostazione predefinita.
Ci sono molti altri validatori forniti di default con Struts. I validatori comuni includono Date Validator, Regex validator e String Length validator. Controllare il seguente collegamento per maggiori dettagli Struts - Validatori basati su XML .