Validación de Formularios simple y con Anotaciones

Validación de Formularios simple y con Anotaciones

En este ejemplo, verá cómo validar un formulario de registro de usuario que hemos creado en el ejemplo anterior. Para validar los campos del formulario lo único que tiene que hacer es tener una clase de UserValidator que implementa la interfaz Validator, invalide el método validate () para realizar todas las validaciones. En la página jsp agregar <form:errors
que es una etiqueta para que muestren los errores y, finalmente, la necesidad de vincular la clase UserValidator con UserController. Puesto que la clase la clase UserController extiende SimpleFormController el método validate () se llamará de forma automática. En caso que usted quisiera tener los mensajes de error separados, entonces usted necesita crear un nuevo fichero de propiedades para añadir todas las claves de error y sus valores correspondientes y, finalmente, vincular Spring al archivo de configuración.

Aquí está nuestra clase UserValidator.

package com.amalakaky.validator;

import org.springframework.validation.Errors;

import org.springframework.validation.ValidationUtils;

import org.springframework.validation.Validator;

import com.amalakaky.dominio.User;

public
class UserValidator implements Validator {

    @Override

    public
boolean supports(Class<?> clazz) {

        return User.class.isAssignableFrom(clazz);

    }

    @Override

    public
void validate(Object target, Errors errors) {

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, “nombre”, “nombre.required”);

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, “password”, “password.required”);

        ValidationUtils.rejectIfEmpty(errors, “genero”, “genero.required”);

        ValidationUtils.rejectIfEmpty(errors, “pais”, “pais.required”);

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, “sobreTi”, “sobreTi.required”);

        User user = (User) target;

        if(user.getComunidad().length == 0)

        {

            errors.rejectValue(“comunidad”,“comunidad.required”);

        }

    }

}

Aquí es necesario reemplazar el método validar. Para comprobar la condición obligatoria puede utilizar los métodos de la clase ValidationUtils como rejectIfEmptyOrWhitespace o rejectIfEmpty. Estos métodos toman tres argumentos el objeto de errores (errors), el nombre de la propiedad (nombre) y el código de error (requiered).

Aquí tenemos a los mensajes de error en un archivo de propiedades particular por lo que añadimos el código de error, incluso se puede añadir a los mensajes de error directamente. Para hacer ningún tipo de validación que usted tenga acceso al objeto de dominio, con el objeto de dominio validación de las propiedades, en caso que hay errores que usted puede utilizar la rejectValue () método de los errores de clase para agregar errores. Aquí, el primer argumento es el nombre de la propiedad y el segundo argumento es el código de error.
El archivo contiene las claves messages.properties de error con los siguientes valores.

nombre.required = Nombre
de
usuario
requerido

password.required =Contraseña
requerida

genero.required = El
género
requerido

pais.required = País
requerido

sobreTi.required = Acerca
de
Usted
requerido

comunidad.required = Seleccione
al
menos
una
comunidad


Ahora agregue de la siguiente forma las etiquetas de errores en la página JSP para que muestre los errores.

<%@
page
language=“java”
contentType=“text/html; charset=ISO-8859-1”

    pageEncoding=“ISO-8859-1”%>

<%@
taglib
uri=http://www.springframework.org/tags/form&#8221;
prefix=“form”%>

<!DOCTYPE html
PUBLIC
“-//W3C//DTD HTML 4.01 Transitional//EN”
http://www.w3.org/TR/html4/loose.dtd&#8221;>

<html>

<head>

<meta
http-equiv=“Content-Type”
content=“text/html; charset=ISO-8859-1”>

<title>Pagina Registro</title>

<style>

.error {

color: #ff0000;

font-style: italic;

}

</style>

</head>

<body>

<form:form
method=“POST”
commandName=“user”>

    <table>

        <tr>

            <td>Nombre Usuario :</td>

            <td><form:input
path=“nombre” /></td>

            <td><form:errors
path=“nombre” cssClass=“error”
/></td>

        </tr>

        <tr>

            <td>Password :</td>

            <td><form:password
path=“password”
/></td>

            <td><form:errors
path=“password”
cssClass=“error”
/></td>

        </tr>

        <tr>

            <td>Genero :</td>

            <td><form:radiobutton
path=“genero” value=“M”
label=“M”
/>

                <form:radiobutton
path=“genero” value=“F”
label=“F”
/></td>

            <td><form:errors
path=“genero” cssClass=“error”
/></td>    

        </tr>

        <tr>

            <td>Pais :</td>

            <td><form:select
path=“pais”>

                <form:option
value=“”
label=“Selecciona”
/>

                <form:option
value=“1”
label=“España”
/>

                <form:option
value=“2”
label=“USA”
/>

                <form:option
value=“3”
label=“UK”
/>

            </form:select></td>

            <td><form:errors
path=“pais” cssClass=“error”
/></td>

        </tr>

        <tr>

            <td>Sobre ti :</td>

            <td><form:textarea
path=“sobreTi”
/></td>

            <td><form:errors
path=“sobreTi” cssClass=“error”
/></td>

        </tr>

        <tr>

            <td>Comunidad :</td>

            <td><form:checkbox
path=“comunidad” value=“Spring”

                label=“Spring”
/>
<form:checkbox
path=“comunidad” value=“Hibernate”

                label=“Hibernate”
/>
<form:checkbox
path=“comunidad” value=“Struts”

                label=“Struts”
/></td>

            <td><form:errors
path=“comunidad” cssClass=“error”
/></td>

        </tr>

        <tr>

            <td
colspan=“3”><form:checkbox
path=“listaCorreo”

                label=“¿Te gustaría formar parte de nuestra lista de correo?” /></td>

        </tr>

        <tr>

            <td
colspan=“3”><input
type=“submit”
value=“Register”></td>

        </tr>

    </table>

</form:form>

</body>

</html>

El atributo de la etiqueta <form:errors
indican la propiedad para la cual se debe mostrar el error que aparece y en path=“comunidad” es el campo que validara. Usar para mostrar todos los errores juntos usa path=“*”.

En el archivo de configuración de Spring en este caso dispatcher-servlet.xml, vincula el UserValidator con la clase UserController mediante la propiedad p:validator-ref=“userValidator” añadimos como queda el archivo de configuración.

dispatcher-servlet.xml

<?xml
version=“1.0”
encoding=“UTF-8”?>

<beans
xmlns=http://www.springframework.org/schema/beans&#8221;

    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance&#8221;

    xmlns:p=http://www.springframework.org/schema/p&#8221;

    xsi:schemaLocation=http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd&#8221;>

    <bean
id=“viewResolver”


class=“org.springframework.web.servlet.view.InternalResourceViewResolver”
p:prefix=“/WEB-INF/jsp/”
p:suffix=“.jsp”
/>


<bean
id=“messageSource”
class=“org.springframework.context.support.ResourceBundleMessageSource”
p:basename=“messages”
/>


<bean
id=“userService”
class=“com.amalakaky.servicio.UserServiceImpl”
/>


<bean
id=“userValidator”
class=“com.amalakaky.validator.UserValidator”
/>

        

    <bean
name=“/userRegistration.htm”
class=“com.amalakaky.web.UserController”
p:userService-ref=“userService”
p:formView=“userForm”
p:successView=“userSuccess”
p:validator-ref=“userValidator
/>

</beans>

Estructura del proyecto:

Ejecute la aplicación y haga clic en el botón de Registrar sin introducir ningún dato para que vea cómo funciona la validación.

Ahora vamos a explicar cómo hacerlo con las anotaciones

Cuando se utiliza la Anotaciones en la clase controlador el método validate () no se llama automáticamente. El método de onSubmit () será llamado cuando se envía el formulario. Aquí tiene que llamar primero al método validate () de la clase UserValidator, a continuación, comprobar si hay algún error con los método hasErrors (), si hay algún error a continuación, redirigir al usuario a la pagina de Registro y muestran los errores, si no hay errores a continuación, mostrar la página de éxito.

Aquí está la clase UserController clase.

package com.amalakaky.web;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.validation.BindingResult;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.SessionAttributes;

import com.amalakaky.dominio.User;

import com.amalakaky.servicio.UserService;

import com.amalakaky.validator.UserValidator;

@Controller

@RequestMapping(“/userRegistration.htm”)

@SessionAttributes(“user”)

public
class UserController {

    private UserService userService;

    private UserValidator userValidator;

    @Autowired

    public UserController(UserService userService, UserValidator userValidator) {

        this.userService = userService;

        this.userValidator = userValidator;

    }

    @RequestMapping(method = RequestMethod.GET)

    public String showUserForm(ModelMap model) {

        User user = new User();

        model.addAttribute(“user”, user);

        return
“userForm”;

    }

    @RequestMapping(method = RequestMethod.POST)

    public String onSubmit(@ModelAttribute(“user”) User user,

            BindingResult result) {

        userValidator.validate(user, result);

        if (result.hasErrors()) {

            return
“userForm”;

        } else {

            userService.add(user);

            return
“redirect:userSuccess.htm”;

        }

    }

}

Aquí el UserService y las clases UserValidator se inyectan con la anotación @ Autowired. El archivo de configuración de Spring tiene las siguientes entradas.

<?xml
version=“1.0”
encoding=“UTF-8”?>

<beans
xmlns=http://www.springframework.org/schema/beans&#8221;

    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance&#8221;
xmlns:p=http://www.springframework.org/schema/p&#8221;

    xmlns:context=http://www.springframework.org/schema/context&#8221;

    xsi:schemaLocation=http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd&#8221;>

    

    <bean
id=“viewResolver”


class=“org.springframework.web.servlet.view.InternalResourceViewResolver”
p:prefix=“/WEB-INF/jsp/”
p:suffix=“.jsp”
/>


<bean
id=“messageSource”
class=“org.springframework.context.support.ResourceBundleMessageSource”
p:basename=“messages”
/>


<context:component-scan
base-package=“com.amalakaky.web”
/>


<bean
id=“userService”
class=“com.amalakaky.servicio.UserServiceImpl”
/>


<bean
id=“userValidator”
class=“com.amalakaky.validator.UserValidator”
/>

</beans>

Puedes descargar el ejemplo aqui:Descargar

Anuncios
Minientrada | Esta entrada fue publicada en Spring. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s