M4-UF1 FRAMEWORK SPRING

UNIDAD 8: Validación de formularios

eugeniaperez.es

unidad 8: validación de formularios

 

eugeniaperez.es

Descarga el código en Bitbucket

 

Descarga el proyecto spring.validation del repositorio de Bitbucket:

Usuario: 

Psswd:

URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.validation.git

 

 

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.1 Validación en el Servidor

La base de las aplicaciones web es la arquitectura cliente servidor mediante peticiones que deben ser validadas para no caer en errores o inconsistencias.

Es imprescindible realizar validación en el servidor, puesto que la validación cliente puede ser burlada fácilmente.

La validación en el cliente es necesaria para evitar peticiones innecesarias.

 

 

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.1 Validación en el Servidor

Lo primero que se debe hacer es añadir las dependencias:

 

 

 

 

Son necesarias las dos: validation y también la de hibernate.

<!-- Validation -->
<dependency>
	<groupId>javax.validation</groupId>
	<artifactId>validation-api</artifactId>
	<version>1.1.0.Final</version>
</dependency>
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator-annotation-processor</artifactId>
	<version>4.1.0.Final</version>
</dependency>

UNIDAD 8: validación de formularios

 

8.1 Validación en el Servidor

Las reglas de validación recaen sobre las entidades, por tanto, habrá que validar sus atributos:

 

 

 

 

 

public class User {

	private int id;

	@Size(min = 4, max = 15, message = "Login must be between 4 and 15 characters long")
	@Pattern(regexp = "[A-Za-z0-9]+", message = "Must contain only chars and numbers")
	private String login;

	@Size(min = 6, max = 15, message = "Password must be between 6 and 15 characters long")
	private String password;

	@Size(max = 255, message = "Description must be less than 255 characters long")
	private String description;

	public User() {
	}
...

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.1 Validación en el Servidor

Modificaremos los métodos del controlador que impliquen validación: reciben un @Valid usuario y un BindingResult, que almacenará los resultados de la validación.

 

 

@RequestMapping(method = RequestMethod.POST, value = { "/users/new" })
	public ModelAndView createUser(@Valid User user, BindingResult bindingResult) {
		ModelAndView modelAndView = new ModelAndView();

		if (bindingResult.hasErrors()) {
			modelAndView.setViewName("user/newuser");
			modelAndView.addObject("user", user);
			return modelAndView;
		}

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.1 Validación en el Servidor

Finalmente para mostrar el resultado BindingResult en la vista utilizamos el tag de sf llamado errors:

 

 

<sf:form id="createUserForm" method="post" modelAttribute="user">
  <div class="form-group">
     <label for="login">Login</label>
     <sf:input path="login" class="form-control" placeholder="Login" />
     <sf:errors path="login" cssClass="error" />
  </div>
  <div class="form-group">
    <label for="password">Password</label>
    <sf:input path="password" class="form-control" type="password" placeholder="Password" />
    <sf:errors path="password" cssClass="error" />
  </div>

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.1 Validación en el Servidor

En este proyecto está habilitada también la validación cliente. Para que veas qué fácil es saltársela, desactiva el Javascript de tu navegador...

 

 

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.2 Validación en el Cliente

La validación Cliente no es del Fw de Spring, puesto que debemos realizarla con tecnología cliente: jQuery.

  • Incluimos las dos referencias a su CDN necesarias:

 

 

         

Vamos a sacar la lógica JS de validación a un fichero a parte para mantener el código limpio.

 

 

<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>

<script
	src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.min.js">	
</script>

UNIDAD 8: validación de formularios

 

8.2 Validación en el Cliente

Dentro del fichero JS para validación de un nuevo usuario:

Definimos el método validate:

  • rules: indicamosqué reglas de validación por campo.
  • messages: por cada campo y regla.
  • errorPlacement: mediante jQuery definimos dónde se va a crear el elemento con el mensaje de error correspondiente.
  • submitHandler: qué hacer en caso de que se pase la validación satisfactoriamente.

 

 

<script src="<c:url value="/resources/js/validateUserForm.js" />"></script>

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.2 Validación en el Cliente

Recuerda activar el Javascript...

 

 

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.3 Layouts: Apache Tiles

Todas estas vistas tienen una estructura común: barra de menú, cuerpo y pie de página...

Lo más lógico es incluir el código común en layouts: header, footer, etc y que cada vista contenga su parte característica.

Para ello, Spring MVC se integra con Apache Tiles, ya que es uno de los más maduros (lleva mucho tiempo en el mercado, al haber nacido con Struts 1).

 

 

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.3 Layouts: Apache Tiles

Se añade la dependencia:

 

 

 

Y los beans en el mvc-config / servlet-context:

  • viewResolver
  • tilesConfigurer donde indico el definitions.xml
<dependency>
	<groupId>org.apache.tiles</groupId>
	<artifactId>tiles-extras</artifactId>
	<version>3.0.5</version>
</dependency>

¡Importante! Para que Apache acepte 

Tiles, se necesita una versión

del FW de Spring superior a 3.1

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.3 Layouts: Apache Tiles

En el fichero definitions.xml definimos las secciones que contendrá cada plantilla:

 

<tiles-definitions>

    <definition name="defaultTemplate" template="/WEB-INF/templates/template.jsp">
        <put-attribute name="header" value="/WEB-INF/templates/header.jsp" />
        <put-attribute name="body" value="" />
        <put-attribute name="footer" value="/WEB-INF/templates/footer.jsp" />
        <put-attribute name="pageScripts" value="" />
    </definition>
        
</tiles-definitions>

UNIDAD 8: validación de formularios

 

eugeniaperez.es

8.3 Layouts: Apache Tiles

Por lo tanto se crearán ficheros que contendrán la cabecera común (header.jsp), el pie de página (footer.jsp)

Y una plantilla por defecto que especificará dónde se debe insertar cada sección: template.jsp

Incluye:

Para especificar la plantilla que se utiliza: insertDefinition

Para indicar la sección a incluir: putAttribute

 

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

Unit 8

By eugenia_perez