Thymeleaf

 O Thymeleaf é uma template engine que permite ao Spring servir páginas HTML, com CSS e Javascript, de forma simples e organizada.

Integração com o Spring

 Para usar o Thymeleaf em uma aplicação Spring, basta importar o pacote spring-boot-starter-thymeleaf.

Organização

 Os arquivos HTML devem ficar dentro da pasta resources/templates, enquanto os arquivos estáticos (CSS, Javascript, imagens, etc.), devem ficar na pasta resources/static, separando cada tipo em uma pasta (ex: resources/static/css).

Servindo um arquivo HTML

 Para o Spring retornar um arquivo HTML como resposta à uma requisição, basta que ele retorne uma string com o nome do arquivo HTML:


 O código acima irá buscar um arquivo chamado create.html na pasta resources/templates.

redirect

 Quando precisamos fazer um redirecionamento (ex: dados foram salvos e o usuário deve ser redirecionado para a tela de listagem), basta retornar "redirect:/url-destino".

ModelAndView

 Porém, quando precisamos criar páginas HTML que utilizam valores de objetos (por exemplo, a página precisa de uma lista de usuários para criar uma tabela com os dados dos mesmos), devemos usar o ModelAndView.
 Na instanciação do mesmo, passamos o nome do arquivo HTML (podemos passar inclusive um redirect)
 Para passar os objetos, basta chamar o método addObject("referênciaNoHtml", obj). Conforme descrito, o primeiro parâmetro será a referência ao objeto no HTML, enquanto o segundo é o objeto em si.

Acessando objetos no HTML

 Para acessar os objetos no HTML, basta usar ${referênciaObjeto.atributo}. O Thymeleaf também fornece atributos específicos para cada elemento HTML para os casos onde é necessário inserir um valor de um objeto:


 Note que para fazer um foreach, usamos data-th-each. Para definir o texto do elemento td, usamos o data-th-text. Por fim, para criar uma URL dinamicamente de acordo com o ID do objeto, usamos o th:href.

Formatação

 Para que o Thymeleaf considere a formatação específica de um atributo conforme definido na classe (ex: a formatação de uma data usando @DateTimeFormat), usamos duas chaves: ${{referênciaObjeto.atributo}}.

Referências

Comentários