English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
I. Introducción
1.1¿Qué es la validación de entrada? ¿Por qué se necesita la validación de entrada?
En el artículo anterior, aprendimos sobre la conversión de tipos de datos, mencionamos los dos métodos de procesamiento de datos de nivel de representación, también mencionamos que los datos de entrada del usuario deben realizarse la conversión de tipos para obtener los datos que queremos, entonces, ¿cómo podemos determinar que los datos después de la conversión de tipos son los datos que queremos? Esto es un poco complicado. Puedes pensar así: la edad de un hombre adulto es18años, ahora quieres obtener18Esta información, pero, la entrada del usuario32Después de la conversión de tipos también es correcto, pero los datos no son los que quieres. ¿Qué debemos hacer en este caso? Por lo tanto, la validación de entrada aquí es útil.
La relación entre la conversión de tipos y la validación de entrada es: la conversión de tipos es el requisito previo de la validación de entrada, si la conversión de tipos falla, no es necesario realizar la validación de entrada. Sin embargo, a menudo la conversión de tipos y la validación de entrada se realizan simultáneamente.
Hay dos tipos de validación de entrada:
1Validación del lado del cliente;
2Validación del lado del servidor. Aquí se explica principalmente la validación del lado del servidor (reescribe el método ValidateXxx y la validación del archivo de configuración xml)
1.2Reescribe el flujo de validación del método ValidateXxx
1El convertidor de tipos es responsable de convertir los parámetros de solicitud de cadena y establecer estos valores como atributos de Action
2、Puede ocurrir una excepción durante la conversión de tipo, si se produce una excepción, la información de la excepción se guardará automáticamente en ActionContext, el interceptor conversionError se encarga de encapsularla en fieldError
3、Llamar al método ValidateXxx mediante reflexión, donde Xxx es el nombre del método que procesará la solicitud del usuario
4、Llamar al método Validate de la clase Action
5、Si los pasos anteriores no producen fieldError, se llama al método de procesamiento de solicitudes del usuario en el Action, si se produce fieldError, el sistema pasa a la vista de lógica de entrada especificada.
Segundo, validación de entrada
2.1、Aquí se explican dos formas de validación de entrada:
1、Sobrescribir el método Validate o crear un método ValidateXxx personalizado (donde Xxx es el nombre definido por el usuario, se ejecuta este método primero, seguido del método Validate)
2、Crear xml para la validación
2.2、Sobrescribir el método Validate
En el marco MVC, se proporciona una parte de validación de datos estándar, Struts2Aquí se proporciona un método Validate, al sobrescribir el método Validate podemos realizar la validación de entrada, pero, hay dos puntos que se deben saber al sobrescribir el método Validate:1、El método Validate se ejecuta antes del método execute;2、El método Validate realiza validaciones para todos los Action, para distinguir a un Action específico, podemos usar el método ValidateXxx.
Atención: Los siguientes ejemplos son ejemplos de uso conjunto de conversión de tipo local y validación de entrada.
Ejemplo simple de verificación de registro:
Se crea la clase entidad User:
User
Se crea una 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>Registro de usuario</title> </head> <body> <h2>Verificación usando el método validateXXX</h2> <form action="register_test"> Usuario:<input type="text" name="user"><br/> Contraseña:<input type="password" name="user"><br/> Contraseña:<input type="password" name="user"><br/> <input type="submit" value="Enviar"> </form> </body> </html>
Se crea la clase RegisterAction que hereda de ActionSupport
package com.validatexxx; import com.opensymphony.xwork2.ActionSupport; //Se sobrescribe el método validate() y los métodos especificados de validateXXX para realizar la verificación /* * En la configuración de struts.xml, al establecer el método method como test(), se llama primero al método ValidateTest(), * Luego se llama al método validate * Después se llama al método 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("Sobrescribir método Validate"); if (null == user.getPassword() || "".equals(user.getPassword()) || null == user.getRepassword() || "".equals(user.getRepassword())) { this.addFieldError("repassword", "repassword debe ser la misma contraseña"); return; } if (!user.getPassword().equals(user.getRepassword())) { //Cuando FieldError contiene datos, el servidor nos ayudará a saltar automáticamente a la vista lógica de input this.addFieldError("repassword", "repassword debe ser la misma contraseña"); } } //1 public void validateTest(){ System.out.println("Método de validación personalizado: ValidateTest"); } //3 public String test(){ System.out.println("test:método"); return SUCCESS; } }
Atención: aquí el atributo es User, por lo que en tu página jsp el nombre del parámetro debe ser el nombre del ejemplo user, además necesitas crear un convertidor de tipo que devuelva una clase llenada con datos
Crear struts.xml y guardarlo en WEB-INF/classes/struts.xml
Atención: aquí el método debe ser el método ValudateXxx() que tú mismo has definido, en este caso el autor ha utilizado test. Usar*debe ser struts2también debe configurarse strict-method-invocation="false", se dice que es porque la versión es demasiado alta, se ha aumentado su seguridad, por lo que es necesario agregarla para poder usarla*
Crear la clase Usertypeconverter que hereda de StrutsTypeConverter (Crear un convertidor de tipo)
package com.validatexxx; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; //La clase de conversión de tipo 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();+"!"; } }
Atención: después de crear el convertidor de tipo,还需要新建一个RegisterAction-conversion.properties, ubicado en el mismo directorio
El contenido del archivo es:
Antes de esto es el nombre de la propiedad en RegisterAction, y después es la ruta específica del convertidor de tipo.
Crear una vista de éxito nueva: success.jsp
success.jsp
Crear una vista de error nueva: input.jsp
input.jsp
El efecto de ejecución del código con éxito es el siguiente:
Página de Register.jsp
La página a la que se saltó con éxito es: success.jsp
Resultado de prueba en la consola:
Los datos se saltan a Usertypeconverter para la conversión de tipo, luego saltan a RegisterAction, se ejecuta el método ValidateTest() y Validate, luego se devuelve SUCCESS y se ejecuta la vista de result.
Veamos el orden de ejecución del código de falla:
Página de Register.jsp
Página de input.jsp
Efecto de prueba en la consola:
En el método Validate, el código del autor es: this.addFieldError(), como se mencionó anteriormente, si se agrega un error, el servidor nos ayudará automáticamente a saltar a la interfaz de error. Devolverá input, y input está configurado en struts.xml, lo que nos llevará a la interfaz de input.jsp.
2.3、新建xml进行输入验证
Crear la interfaz de vista: 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>Validación XML</title> </head> <body> <s:form action="empinfo" method="post"> <s:textfield name="name" label="Nombre" size="20" /> <s:textfield name="age" label="Edad" size="20" /> <s:submit name="submit" label="Enviar" align="center" /> </s:form> </body> </html>
Crear la clase Employee que hereda de ActionSupport
Esta clase utiliza la sobrescripción del método Validate y la configuración Xml, podemos elegir una de las dos para la validación
package com.validatexxx; import com.opensymphony.xwork2.ActionSupport; //Utilice el método validate() para la validación, ¡esto es una validación en el servidor! 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.edad = edad; } //Segundo, ejecute este método public String execute(){ System.out.println("execute:"+this.edad); return SUCCESS; } /* Utilice la verificación del servidor: reescriba el método validate(); //Primero, ejecute este método //El reescritura del método validate tiene defectos: se utiliza el método validate cada vez, lo que causa un gran desperdicio de recursos. public void validate(){ System.out.println("validate"); if (nombre == null || nombre.trim().equals("")) { //Cuando se agrega datos a este método, el servidor devuelve input y luego se cambia a la página input.jsp. addFieldError("name","El nombre es obligatorio"); } if (edad < 28 || edad > 65) { addFieldError("age","La edad debe estar entre 28 and 65"); } } */ }
Configuración en Struts.xml:
Aquí success.jsp e input.jsp siguen usando lo anterior.
Después necesitamos crear Employee-validation.xml, la ruta se coloca en el mismo directorio que Employee, atención:-validation.xml es inmutable.
El contenido es:
<?xml version="1.0" encoding="UTF-8-8"?> !DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//ES "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <field name="name"> <field-validator type="required"> <message> El nombre es obligatorio. </message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">29</param> <param name="max">64</param> <message> La edad debe estar entre 28 and 65 </message> </field-validator> </field> </validators>
Punto clave: La restricción dtd de este archivo debe existir, de lo contrario se generará un error:
ERROR DefaultDispatcherErrorHandler Se produjo una excepción durante el procesamiento de la solicitud: [Tiempo de conexión agotado: conectar - [ubicación desconocida], null]
A continuación, utilizaremoshttp://localhost:8080/LearStruts2/ValidateJSP/Test.jsprealizar la visita.
Prueba exitosa:
Interfaz de Test.jsp:
success.jsp
Ejemplo de prueba fallida:
Interfaz de input.jsp:
El ejemplo de explicación es correcto.
En realidad, en Struts2Tiene varios validadores integrados: validador obligatorio, validador de cadena obligatoria, validador de entero, validador de fecha, validador de expresión, validador de longitud de caracteres, validador de expresión regular... etc. Si es necesario, el autor explicará uno por uno.
Lo que se menciona a continuación es lo que el editor les presenta a ustedes, Struts2Detalles del tutorial de validación de entrada de datos, espero que sea útil para todos. Si tienen alguna pregunta, déjenme un mensaje y editaré las respuestas a tiempo. También agradezco muchísimo el apoyo a la página web de tutorial de gritos!
Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad del autor original, el contenido se ha contribuido y subido por los usuarios de Internet, este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de violación de derechos de autor, le invitamos a enviar un correo electrónico a notice#w.3Aviso: Si encuentra contenido sospechoso de violación de derechos de autor, envíe un correo electrónico a notice#w con el # reemplazado por @ y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso.