viernes, 11 de diciembre de 2015

Recibir parámetros de un formulario con Spring MVC

Uno de los elementos más utilizados en una aplicación web son los formularios, y Spring MVC nos provee una forma de utilizarlos bastante elegante en mi opinión. En este ejemplo veremos como
procesar los datos recibidos de un formulario HTML.



El código completo del ejemplo lo puedes encontrar en mi repositorio de GitHub






En primer lugar vamos a ver un formulario html  y como Spring MVC es capaz de recoger esos parámetros enviados y recibirlos en un controlador:



<h2>Formulario HTML Básico 1</h2>
   <form method="POST" action="basicForm">
        Id:<input type="text" name="id"/>
        Nombre:<input type="text" name="name"/>
        Contraseña:<input type="password" name="password"/>
        Email<input type="text" name="email"/>
        <input type="submit" value="Enviar">
  </form> 

en el cual tenemos unos campos como id, name, password y email. A modo didáctico es posible recibir estos campos simplemente pasándolos como argumentos del método que realice el mapeo del formulario:


@RequestMapping(value = "basicForm", method = RequestMethod.POST)
    public String basicForm(int id, String name, String password, String email) {
    //....
}

tan simple como que el atributo name del formulario se corresponda con el parámetro recibido en el nombre. Otra forma similar es utilizar la anotación @RequestParam

public String basicForm(
            @RequestParam("id") int id,
            @RequestParam("name") String name,
            @RequestParam("password") String pass,
            @RequestParam("email") String mail) {
//...
}

Esta etiqueta nos varias posibilidades, una de ellas es que no sería necesario que los nombres sean iguales, pero por otro lado podemos definir si un valor por defecto o si el campo es obligatorio.

@RequestParam(value = "id", defaultValue="1") define un valor por defecto para el id de 1 en el caso de que el campo esté vacío.
@RequestParam(value = "id", required="true") lanza una excepción si el campo id es null o está vacío. El valor required tiene por defecto false, por lo que no tiene sentido la combinación de defaultValue + required.

Si recuerdas, en un servlet utilizar el HttpServletRequest request y request.getParameter() devuelve siempre un String y era necesario realizar el casting al tipo de dato especifico, por ejemplo en el caso del id a tipo int, Spring lo realiza automáticamente por nosotros.

Podemos simplificar aun más el código anterior si tenemos definido una clase por ejemplo User, que tenga los campos del formulario:


public class User {
    private int id;
    private String name;
    private String password;
    private String Email;

    public User() {
    }

    //Getter and Setters   
}

en este caso el código se simplifica bastante ya que recibimos directamente un objeto user:

@RequestMapping(value = "basicForm", method = RequestMethod.POST)
public String basicForm2(User user) {
 //...
}


Ten en cuenta que no estamos añadiendo la protección CSRF al formulario, ni estamos validando los datos recibidos por simplificar el código.

En próximos artículos veremos como utilizar los Spring TAGS para mostrar formularios y cómo validar los datos en el servidor.



2 comentarios:

  1. I will really appreciate the writer's choice for choosing this excellent article appropriate to my matter.Here is deep description about the article matter which helped me more.
    Spring boot Online Training

    ResponderEliminar