lunes, 11 de marzo de 2013

Uso de formularios con spring mvc

En este post trataremos como realizar una página de formulario con spring. El ejemplo partira del acceso al fomulario, donde editaremos los datos de un objeto y los recogeremos posteriormente para almacenar los cambios. A lo largo de los pasos indicaremos que debemos realizar y cuales son los posibles fallos.

- Para empezar en el controller encargado de acceder a la página de edición, obtenemos el objeto de la base de datos y lo añadimos a la vista.

@Controller
public class RedirectObjectController {

 @Autowired
 ObjectService service;

 @RequestMapping(value = "edit/object.htm")
 public ModelAndView execute(@RequestParam final String id, final HttpServletRequest request,
   final HttpServletResponse response) throws ServletException, IOException {

  //Obtenemos el objeto del repositorio 
  Object beanForm = service.findById(Integer.valueOf(id));
  ModelAndView model = new ModelAndView("edit.object.page");
  //asociamos el objeto al formulario con un determinado identificador. 
  model.addObject("object", beanForm);

  return model;
 }
}

'edit.object.page' es la redirección a la página siguiente (en este caso esta realizado mediante tiles y de ahí el nombre).

En el caso de que el objeto no se añada al modelo o sea nulo, puede ocurrir un error del tipo Neither BindingResult nor plain target object for bean name xxxx available as request attribute. Esto es debido a que no encuentra el objeto que se debe asociar al formulario tal y como veremos más adelante.

- Generamos la página JSP que contiene el formulario y a la que asociamos el objeto anteriormente asociado

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags">
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form">



Los atributos path de los input son atributos de la clase object que hemos incluido. Cuando accedamos a la página podemos comprobar como los campos se han rellenado con los valores del objeto asociado al formulario.

- Por último creamos otro controller que recoja el formulario y realice la actualización del objeto.

@Controller
public class SaveDiscController {

 @Autowired
 private ObjectService service;

 @RequestMapping(value = "save/object.htm")
 public ModelAndView searchDisc(@ModelAttribute("object") final Object form) throws ServletException, IOException {

  service.update(form);
  return new ModelAndView("search.object.page");

 }
}

En este método guardamos los cambios del objeto y redirigimos a la página donde se muestran todos los objetos (Desde la cual se debería llegar al primer controller)

Y de esta manera sencilla ya hemos visto como asociar y editar los datos de un objeto asociado a un formulario.

1 comentario:

  1. Hola. Tengo un problema con este paso de objetos. Mi objeto tiene 2 fechas que intrudusco como dd/MM/yyyy pero al llegar el objeto al controlador que almacena la clase me llega errada. Como puedo asegurar que interprete bien la fecha?

    ResponderEliminar