dorwas2 ha scritto:
Salve a tutti, devo completare un esercizio Spring Boot in cui dobbiamo aggiungere una view thymeleaf che ci permetta di visualizzare gli studenti presenti sul database, qualcuno potrebbe darmi qualche consiglio oppure qualche sito dove poter trovare qualche spunto ? grazie
A grandi linee:
1)
Per poter usare Thymeleaf è necessario innanzitutto mettere la dipendenza di "starter" per il web, perché è quella che porta nel progetto spring-web, spring-webmvc e altro tra cui pure il Tomcat embedded.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Poi specificatamente per Thymeleaf serve un altro "starter" apposito, ovvero:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2)
Per default i template di Thymeleaf vengono pescati nella cartella templates che sta alla "radice del classpath". Ovvero fisicamente nel progetto:
<nomeprogetto>/src/main/resources/
templates
Lì sotto ci devono stare dei file con estensione .html, anche in sottocartelle, eventualmente, es.:
<nomeprogetto>/src/main/resources/templates/home.html
3)
In un controller Spring è sufficiente mettere dei dati nel Model o ModelAndView, che possono poi essere usati nel template Thymeleaf e infine specificare il nome della "vista" che è il nome del template (con eventuale path sotto templates)
senza estensione (perché per default viene
già aggiunto ".html").
Es.
"home" ---> src/main/resources/templates/home.html
"help/info" ---> src/main/resources/templates/help/info.html
Quindi ad esempio:
import org.springframework.ui.Model;
//...
@GetMapping("/blabla")
public String getHomePage(Model model) {
String messaggioStr = //.....
model.addAttribute("messaggio", messaggioStr);
return "home"; // nome della vista
}
oppure
import org.springframework.web.servlet.ModelAndView;
//...
@GetMapping("/blabla")
public ModelAndView getHomePage() {
ModelAndView mav = new ModelAndView("home"); // nome della vista
String messaggioStr = //.....
mav.addObject("messaggio", messaggioStr);
return mav;
}
Le due forme sopra sono equivalenti come risultato, cambia solo la classe di "modello" di Spring che si usa.
In alternativa a Model si può anche usare ModelMap. La differenza è che Model è una interfaccia (Spring inietta nel metodo una sua implementazione specifica) mentre ModelMap è una classe che estende LinkedHashMap quindi è davvero direttamente una "vera" mappa.
La documentazione di Spring chiarisce molto bene quali tipi si possono usare come
Method Arguments e come
Return Values di un metodo di controller.
4)
Poi nel template es. home.html ci sarà dentro es.:
<!DOCTYPE html>
<html lang="it" xmlns:th="http://www.thymeleaf.org">
....
....
<span th:text="${messaggio}">testo fittizio</span>
....
</html>
("testo fittizio" verrà rimosso da Thymeleaf e sostituito dal risultato della expression ${ ..... } )
Per tutti i costrutti gestiti da Thymeleaf chiaramente bisogna documentarsi:
Tutorial: Using Thymeleaf