Spring MVC y Thymeleaf
MVC es un patron de diseño cuyas siglas significan Model-View-Controller. La base de este patrón de diseño es dividir "el rol" de nuestros componentes en tres, o lo que es lo mismo, separar la lógica de negocio, de la capa de presentación y la capa de acceso a datos.
Spring MVC es una librería de Spring que implementa este patrón y conecta nuestros componentes a la web. Spring MVC divide los roles de la siguiente manera:
Un ejemplo sencillo:
Vista: platilla "home.html" en src/main/resources/templates
Controlador:
Ejemplo:
Donde el objeto es newMessage, y text es un atributo de este objeto. No es necesario hacer ${newMessage.text}. Por otro lado, el th:action reemplazara el action="#".
Toca el turno del Controlador para este ejemplo:
Spring MVC es una librería de Spring que implementa este patrón y conecta nuestros componentes a la web. Spring MVC divide los roles de la siguiente manera:
- Plantillas HTML: las vistas. Cada una representa una pantalla diferente.
- Spring beans: los controladores. Usaremos la anotación @Controller. Los métodos de estos controladores son los que deciden que plantillas usar, asi como rellenarlos con datos del Modelo.
- Objetos Model: el modelo. Cada metodo del Controlador puede contener opcionalmente un Modelo como parametro, y al leer y cambiar los datos que contiene, el Controlador puede leer los datos enviados por el usuario y enviarlos a la plantilla con esos cambios.
Un ejemplo sencillo:
Vista: platilla "home.html" en src/main/resources/templates
<h1 th:text="${welcomeMessage}">Hello, homepage!</h1>
Controlador:
@RequestMapping("/home")
public String getHomePage(Model model) {
model.addAttribute("welcomeMessage", "Hi Manu");
return "home";
}
Envio de datos desde el FE (Thymeleaf) al BE (Controllers)
Cada formulario tiene un POJO (Plain Old Java Object - Objeto simple). Esta clase contendrá los datos introducidos por el usuario en el formulario y será enviado al Controlador cuando se haga submit del formulario. Spring crea este objeto cada vez que recibe un request, y se lo pasa al método del controlador que nosotros hayamos definido para que se encargue de ese request. El controlador devolvera una cadena que representara el template a utilizar por Spring, y proporcionara todos los datos que el template pueda necesitar para su renderizado. Pero también tratará los datos recibidos en el formulario.Ejemplo:
<form th:object="${newMessage}" th:action="@{/home}" action="#" method="POST">
<input th:field="*{text}" type="text">
<input type="submit">
</form>
Donde el objeto es newMessage, y text es un atributo de este objeto. No es necesario hacer ${newMessage.text}. Por otro lado, el th:action reemplazara el action="#".
Toca el turno del Controlador para este ejemplo:
...
@GetMapping("/home")
public String getHomePage(@ModelAttribute("newMessage") MessageForm newMessage, Model model) {
model.addAttribute("greetings", this.messageListService.getMessages());
return "home";
}
@PostMapping("/home")
public String addMessage(@ModelAttribute("newMessage") MessageForm messageForm, Model model) {
messageListService.addMessage(messageForm.getText());
model.addAttribute("greetings", messageListService.getMessages());
messageForm.setText("");
return "home";
}
...
Comentarios
Publicar un comentario