lunes, 20 de julio de 2015

Validación de un formulario en Spring - II

Ya hicimos hace poco un post sobre validación de formularios. Hoy vamos a tratar de realizar otro tipo de validación con Spring MVC. La idea es crear un Objeto validador que nos permita validar el objeto de formulario al cual accedemos. Para ello el primer paso es crear dicho objeto, el cual debe de extender de 'org.springframework.validation.Validator'.
@Component
public class LibroValidator implements Validator {
 @Override
 public boolean supports(Class clazz) {
  return Libro.class.equals(clazz);
 }
}
Dentro de esta clase podemos hace validaciones de diferentes formas. Una de ellas es haciendo uso de una clase de utilidad como es '' y otra forma es a través de realizar validaciones manuales. Aquí un ejemplo:
@Override
public void validate(Object obj, Errors errors) {
 ValidationUtils.rejectIfEmptyOrWhitespace(errors, "serie", "serie.empty");
 Libro libro = (Libro) obj;
 if(StringUtils.isBlank(libro.getNombre())){
  errors.rejectValue("nombre", "nombre.empty");
 }
}
Por último solo queda realizar la llamada al validador dentro del método del controlador, y devolver a la pantalla de edición si es que hay algún error
@RequestMapping(value = "save/book.htm")
public ModelAndView searchDisc(@ModelAttribute("libro")  final Libro form, BindingResult result)
  throws ServletException, IOException {
 try {
  LibroValidator validator = new LibroValidator();
  validator.validate(form, result);
  
  if(result.hasErrors()){
   return new ModelAndView("edit.book.page");
  }else{
   if (form.getIdent() == null) {
    service.create(form);
   } else {
    service.update(form);
   }
  }
 } catch (Exception except) {
  logger.error("Error al guardar el libro", except);
 }
  return new ModelAndView("search.book.page");
}
Edición: También podriamos realizar la validación del objeto de la siguiente forma: 1. Añadir el atributo @Valid al parámetro de entrada 'form' 2. Asociar el validador al Binder.
@InitBinder
protected void initBinder(WebDataBinder binder) {
      binder.setValidator(new LibroValidator());
}

No hay comentarios:

Publicar un comentario