lunes, 8 de junio de 2015

Validación de un formulario en Spring 3 - I

Buenas, vamos a intentar realizar unos sencillos post de como validar un formulario con Spring MVC, todo con anotaciones e intentando configurar lo menos posible. En este primero haremos la validación de la conversión del objeto formulario y los mensajes asociados a esta:

Por un lado tenemos nuestro controlador que recibe un objeto con los datos del formulario.

Controlador:
@Controller
public class SaveBookController {
@RequestMapping(value = "save/book.htm")
public ModelAndView saveBook(@Valid @ModelAttribute("libro")  final Libro form) {
service.update(form);
return new ModelAndView("search.book.page");
}

Objeto Formulario:

@Entity
@Table(name = "libro", catalog = "almacen")
public class Libro implements java.io.Serializable {
private Integer ident;
private String nombre;
private String autor;
private Integer paginas;

Si no ponemos absolutamente nada cuando, lo primero es que no validará nada y si hay algún error, lo más seguro es que salte la excepción no controlada. Si introducimos por ejemplo un texto asociado al atributo de tipo entero, saltara una excepción de tipo BindException y además no tendremos como devolver el error por pantalla.

Para el correcto funcionamiento haremos lo siguiente, Modificaremos el método que realiza la llamada para adjuntar el atributo de tipo BindingResult. Este objeto nos devolverá si hay algún error al realizar la asociación entre el objeto y los datos del formulario.

Al acceder al método podremos comprobar si se ha realizado algún error y en dicho caso redirigir a la pantalla de edición y mostrar el error correspondiente.

@RequestMapping(value = "save/book.htm")
public ModelAndView searchDisc(@ModelAttribute("libro")  final Libro form, BindingResult result){
if(result.hasErrors()){
return new ModelAndView("edit.book.page");
}else{
service.update(form);
} return new ModelAndView("search.book.page"); }

Si queremos ver los mensajes de forma correcta y en el formato deseado debesos hacer dos cosas. Primero, poner el tag que permite ver los mensajes

<spring:message code="general.pages.name"/>

SegundO, modificar los mensajes en nuestro fichero properties, podemos sobrescribir los mensajes por defecto de Spring.

errors.empty.number=number field is empty
errors.empty.type=type field is empty
typeMismatch.contact.number=type mismatch Contact Number
typeMismatch.java.lang.NumberFormatException=5. Invalid value for {0}, accepts only numbers.
typeMismatch.java.lang.Integer=Must specify an integer value.
typeMismatch.java.lang.Long=Must specify an integer value.
typeMismatch.java.lang.Float=Must specify a decimal value.
typeMismatch.java.lang.Double=Must specify a decimal value. 
typeMismatch.int=Invalid number entered
typeMismatch=Invalid type entered

No hay comentarios:

Publicar un comentario