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
Unit 8
- 1,169