Framework Validator

31

Transcript of Framework Validator

Page 1: Framework Validator
Page 2: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

FRAMEWORK VALIDATOR FORMULARIO RFC CON STRUTS Y FRAMEWORK VALIDATOR Nuevo proyecto Struts “FormularioRFC_Framework_Validator” Dentro del Struts-Config ya viene el Plugin pre-configurado el Framework Validator

1

Page 3: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Creamos nuevo paquete “acciones” y dentro 3 clases:

• UserRegistrationAction.java • UserRegistrationForm.java • Usuarios

Usuarios.java

2

Page 4: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

3

Page 5: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

UserRegistrationAction.java

4

Page 6: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

UserRegistrationForm.java

5

Page 7: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

6

Page 8: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

MessageResources.Properties Creamos 2 JSP:

• RegistroCorrecto.jsp • RegistroUsuarios.jsp

7

Page 9: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

RegistroCorrecto.jsp

8

Page 10: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

RegistroUsuarios.jsp

9

Page 11: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

10

Page 12: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Struts-Config.xml

11

Page 13: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

12

Page 14: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Validation.xml

13

Page 15: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Probamos el código: Comprobación de los campos Validación tipo email Las casillas Teléfono y Fax regresan a cero si no se ingresan numero

14

Page 16: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Comprobación de password Comprueba que se cumpla la máscara valida

FRAMEWORK VALIDATOR Es usado para validar campos. Las validaciones son hechas de muchas formas, por ejemplo validar un código postal, que se encuentra en un formulario de registro y en un formulario de pedidos. En lugar de estar escribiendo un código de validación en cada formulario (en cada uno de los métodos de validación dentro de los beans de formulario), podemos crear un mecanismo de validación general para todos los números postales del sistema. El Framework Validator trae muchas reglas de validaciones comunes y además de estas reglas podemos crear nuestras propias reglas.

PARA INICIAR EL TEMA: Vamos a usar el Framework Validator para validar campos de un formulario de registro. Para este formulario deseamos que el usuario ingrese su nombre. El username deberá empezar con una letra, constaran de al menos 5 caracteres alfanuméricos o guiones y no exceder de 11 caracteres, XD.

PASOS FORMULARIO FRAMEWORK VALIDATOR Nnuevo proyecto Struts “FormularioFrameworkValidator” 1) Se debe agregar primero el Plugin de Validator al archivo de configuración de Struts(El Worshop la lo trae incluido) que será el encargado de leer las reglas de validación. Para poder usar el Validator con Struts necesitamos agregar este Plugin en el Struts-config.xml debajo de la sección Message Resource Definitions.

15

Page 17: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Como archivos principales dentro del WEB-INF se necesitan:

• Validator-rules.xml • Validator.xml

2) Por ahora solo se van a usar reglas de validación comunes pre-existentes ya en nuestro archivo Validator-rules.xml así que no es necesario modificarles nada. El Validator.xml establece el mapeo de las propiedades con las reglas y con los mensajes de errores que se mostraran al no cumplir las reglas.

ACTION FORM 3) Nuevo paquete – Nueva clase “UserRegistrationForm” extends ValidatorForm Creamos un ActionForm (UserRegistrationForm.java) que herede de la clase ValidatorForm (or.apache.struts.validator.ValidatorForm). Este ValidatorForm este se encarga de engancharse con el Framework Validator. El ValidatorFrom va a sobrescribir el método validate() del ActionForm y comunicarse con el Validator Framework para validar los campos de este formulario. UserRegistrationForm.java

16

Page 18: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Creamos nuestra acción UserRegistrationAction que extiende de Action UserRegistrationAction.java 4) Creamos nuestro JSP que vamos a utilizar userRegistration.jsp

17

Page 19: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

regFailure.jsp regSucces.jsp

18

Page 20: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

STRUTS-CONFIG Mapeamos nuestro Form Bean en el Struts-config.xml en la sección de <form-beans> Mapeamos nuestra acción

VALIDATOR.XML Deberemos agregar el mapeo de la definición del bean userRegistrationForm del Strut-config.xml a las reglas que deberán ser invocadas en las propiedades individuales del userRegistrationForm. Agregamos un form en el formset del validation.xml. Este código establece que se escribirán las reglas de las propiedades del form bean que es asociado con el atributo “userRegistrationForm” definido dentro del Struts-config.xml. El nombre tiene que coincidir con el valor del atributo.

19

Page 21: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Agregar campos en la declaración de campos que correspondan al el userName. Especificaremos que formularios deseamos asociar con las reglas podemos empezar asociando campos con las reglas predefinidas: Especificamos que el campo userName corresponden a las reglas required, minlength, y maxlength. Atributo depends Toma una coma delimitadora para una lista de reglas asociadas con esta propiedad. Entonces así este código asocia la propiedad username con las reglas required, minlength, maxlength, estas reglas son un ejemplo de muchas reglas construidas en el Framework Validator. Estas reglas están asociadas con el manejador de reglas y con un key de mensaje de error. Si miramos en el Validator-rules.xml en la parte de arriba encontramos: El elemento Validator define la regla minlength, también usa el atributo classname para especificar el manejador de reglas, la clase que implementa la regla. En este ejemplo el manejador para esta regla es la clase org.apache.struts.validator.FieldChecks por el método validateMinLength(). El atributo msg específica el key que jalara del message bundle para el mensaje de error que se mostrara al validar el campo a la hora de validar.

20

Page 22: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Es necesario agregar este mensaje en el message bundle. En este caso este mensaje ya viene escrito en el message bundle, también ya vienen todos los mensajes para todas las reglas pre-construidas. Notamos que en mensajes de reglas maxlength(errors.maxlength) toma dos argumentos {0} y {1} como también lo hace minlength. El mensaje de regla required solo toma un argumento. Tu podrías necesitar configurar estos elementos para estos argumentos. El primer argumento {0} corresponde a la etiqueta del campo, el segundo argumento {1} corresponde a la cardinalidad de los caracteres. Checa el API java.text.MessageFormat para más información En esta parte se especifica que el label username es el primer argumento para el error message, recordamos que el mensaje error.minlength toma 2 argumentos. El primer argumento es el nombre de la etiqueta, el segundo argumento es el valor de la variable minlength (podríamos establecer el segundo elemento después). Para establecer el primer argumento usamos el elemento arg0.

21

Page 23: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

El arg0 pasa el key del message resource , uerRegistration.userName, por lo tanto el mensaje de error para este ejemplo mostrara userRegistration.userName el cual es el label para el campo username. Configuramos el valor del minlength a 5 y el maxlength a 11. Las reglas toman parámetros, esta regla toma un parámetro que dice cuál es el número mínimo de caracteres, para establecerlo tenemos que usar el elemento <var>. La regla minlength tiene una variable llamada minlength (el nombre de la regla y de la variable no siempre coinciden). EL elemento <var> toma 2 sub-elementos que especifican el nombre de el parámetro y el valor del parámetro. Especificamos: El valor de las variables de la regla minlength que es el segundo argumento (arg1) en el error message si la regla se acciona. La variable maxlength es el segundo argumento (arg1) si la regla malength es activada. Entonces, en lugar de obtener el argumento del resource bundle , la obtendremos de la variable que acabamos de definir. Para esto deberás especificar otro argumento. Esta vez use arg1: Notamos que el código establece el atributo rsource igual a false (resource=false) lo que significa que el segundo argumento no será buscado en el paquete de recursos (resources), en vez de eso el segundo argumento usara la variable minlength definida en los pasos previos. Para hacer esto el atributo key es establecido con ${var:minlength}(key=”${var:minlength}”), que establece que el valor del segundo argumento es igual a el valor de la variable minlength (algo así como una especie de JSTL). El atributo name de arg1 establece que este segundo argumento solo es apropiado para la regla minlegth (name=”minlegth”), así el segundo argumento será el valor de la variable minlength solo si hay un problema de validación con la regla minlength.

22

Page 24: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Recordamos que la propiedad puede ser asociada con muchas reglas porque el atributo depends (depende) del elemento campo que toma una lista delimitada por comas de las reglas asociadas con la propiedad. Por lo tanto el atributo name especifica que regla con este argumento es usado. Para correr esto comentamos nuestro viejo método validate() de modo que el método validate() definido ahora por el ValidatorForm se ejecute. Como parte de este registro de usuario, el código anterior hará que el username sea obligatorio con 5 caracteres como mínimo pero no mayor a 11, pero no asegurara que el primer carácter sea letra y los demás caracteres sean alfanuméricos para eso usaremos la reglas mask. Corremos nuestro proyecto:

23

Page 25: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

REGLAS COMUNES DEL VALIDATOR

Antes de escribir nuestras reglas debemos familiarizarnos con las reglas comunes que se incluyen con el framework:

24

Page 26: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

USO DE LA REGLA MASK Esta regla es bastante flexible y elimina la necesidad de escribir un montón de reglas de validación personalizadas. Debido a que la regla mask usa la expresión regular parecido al estilo de programación Perl, muy poderoso, en esta parte asumen que ya sabemos usar las expresiones regulares, si no es asi es buen momento de aprender. Pero si ya han usado las expresiones regulares en Perl, Phyton o JavaScript entonces ya están del otro lado. Además si usted ha utilizado el paquete de expresiones regulares que viene con el JDK 1.6 o superior, ya está en buen camino porque la sintaxis trabaja de la misma manera. Puesto que estamos escribiendo nuestras propias reglas, empezaremos desde cero, el default message a menudo no tiene sentido. Miraremos un simple mensaje por default como aquellos de minlength, maxlength, y date, Que probablemente no trabajaremos. Como queremos escribir nuestras propias reglas personalizadas con la ayuda de regular expression. Entonces necesitamos especificar nuestros mensajes personalizados que la regla mask usara. Los messages podrían explicar lo que la rutina de validación de la expresión regular hace para que el usuario final pueda entender así como solucionar el problema de validación (Por ejemplo introducir correctamente el RFC).

PASOS Para demostrar esto, vamos a decir que username tiene que iniciar con una letra y este puede contener letras, números y guiones bajos. Partimos de que ya tenemos un nuevo proyecto de Struts (y todos esos pasos :P)

• Usaremos los mismos jsp • La misma configuración Struts-config.xml • Crearemos nuevas reglas dentro del Validator.xml • • Usaremos las mismas acciones

25

Page 27: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Este es el código que necesitaremos: Validator.xml Los pasos para usar la regla mask y definir nuestros propios mensajes personalizados son:

1) Especificar que el campo username corresponde a la regla mask: Este paso es similar al paso realizado anteriormente, ahora el username está asociado con 4 reglas: required, minlength, maxlength y mask. Si miramos la regla mask dentro del archivo Validator-rules.xml en la parte de arriba veremos que está asociado con un mensaje llamado errors.invalid:

26

Page 28: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Miramos el mensaje por default (errors.invalid) en el resource bundle (messageResources.properties) Miramos en el mensaje de error anterior, si nos ponemos en los zapatos del usuario final, el mensaje anterior no es muy específico acerca de porque el campo es invalido. Para ser más específico, necesitamos especificar mensajes personalizados asociados con la reglas mask. Al igual que puedes especificar argumentos preconizados (arg0, arg1) para mensajes. Tú puedes también especificar mansajes personalizados.

2) Especificar una key de mensaje de error para la regla mask. Porque un mensaje genérico porque un mensaje genérico no tendría sentido, tú necesitas especificar una key para esta regla usando el elemento msg así:

(dentro de Struts-config) El elemento msg toma 2 atributos. El atributo name especifica cual regla deseamos asociar con el message key. El elemento key especifica el key a localizar dentro del resource bundle (MessageResources.properties). Por lo tanto el mensaje anterior solo se usara cuando haya un error de validación en la mask.

3) Agregamos el mensaje al resources bundle (MessageResources.properties). Vemos como se especifica este mensaje de error, podemos ver como el mensaje tiene la opción de cambiar cada vez que se usa la regla mask con otro campo (oxea el {0}). El mensaje para la regla mask aplicado para un número telefónico va a ser muy diferente al mensaje para la regla mask aplicada a un código postal.

4) Configuramos el valor de la variable mask al patrón que implementa nuestra regla de negocios. Las variable mascara de nuestra regla mascara contiene una expresión regular que puedes aplicar al campo. Si el campo no coincide con la regla, entonces no lo valida. Aquí esta las mascara para el campo username:

27

Page 29: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

La Expresion regular es un arma necesaria en el arsenal de un desarrollador web, para los recién convertidos al mundo de la expresión regular, el que tu deseas que coincida el inicio de la línea. Significa que esperamos que el primer carácter deber ser una letra mayúscula o minúscula. El {1} significa que esperamos uno de los elementos de la lista del messageResources. Significa que esperamos muchos (cero o mas) letras (a-zA-Z), numeros(0-9) Y guiones bajos(_) despues del primer carácter. Entonces no necesitariamos de la regla maxlength. Sin embargo el error messages son claros si tu divides esto entre reglas (ej. El errror message para maxrule es mas especifico que el message error de mask). Si tu deseas usar la misma mascara en mas de un formulario , por ejemplo en los formularios registration y login, en ambos contiene el campo userName. Para eso se necesitaria definir el uso de constantes globales para reutilizar las mascaras. Es importante resaltar que las reglas son aplicadas en el orden en que fueron listadas. Por ejemplo, si teclemos *hi en el campo username y la regla minlength es listada primero en el valor del atributo depends, miraremos el error de minlength. Pero si listamos primero la mask, miraremos el error de mask.

28

Page 30: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Struts-config.xml

29

Page 31: Framework Validator

Struts Framework Validator Eladio Del Razo (TribalProject)

Lo ejecutamos con: http://localhost:7001/FormularioFrameworkValidator_ReglaMask/userRegistration.do

30