O Thymeleaf é um substituto do JSP que tem total integração com o
Spring, trabalhando com layouts e fazendo a integração das páginas XHTML, HTML5
e XML com o Java no lado servidor.
Dito isto, para quem usa Spring MVC com Spring Boot precia
adicionar as dependências no pom.xml da seguinte forma:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Quem não usa o Spring Boot deve colocar:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.0.BETA02</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.0.BETA02</version>
</dependency>
E adicionar o seguinte namespace no layout principal e das
páginas:
xmlns:th="http://www.thymeleaf.org"
Desta
forma, já possível usar as TAGS do Thymeleaf
nos arquivos XHTML, HTML5 e XML. Porém o foco desse post é o uso do Thymeleaf para encapsular a chamada de
recursos estáticos como imagens, arquivos Javascript e CSS, etc., fazendo com
que o Thymeleaf mapeie de forma
dinâmica o caminho absoluto desses recursos. Isso é muito útil, principalmente
para quem usa o Spring Boot com o Tomcat
embutido, no desenvolvimento, porém vai fazer o deploy em um servidor de
aplicação mais robusto ou mesmo em um Tomcat externo, pois o context-path (caminho do contexto) muda
e causa vários transtornos.
Vou
apresentar a maneira com e sem o Thymeleaf para percebermos a diferença. Primeiro vamos à maneira comum, sem o uso do Thymeleaf, onde nós somos responsáveis por mapear o caminho dos
recursos:
<a class="btn btn-link
link-panel" href="/carros">Carros</a>
<form class="form-horizontal"
method="POST" action="/carro">
<script src="/js/jquery-2.2.2.min.js"></script>
<link rel="stylesheet"
type="text/css" th:href="/css/estyle.css"/>
<img src="/images/logo.png" width="200dp" />
E agora vamos ver como ficam esses recursos
com o Thymeleaf:
<a class="btn btn-link
link-panel" th:href="@{/titulos}">Carros</a>
<form class="form-horizontal"
method="POST" th:action="@{/carro}">
<script th:src="@{/js/jquery-2.2.2.min.js}"></script>
<link rel="stylesheet"
type="text/css" th:href="@{/css/estyle.css}"/>
<img th:src="@{/images/logo.png}" width="200dp" />
Veja
que praticamente todos os casos foram abordados: imagens, scripts, action de
forms, e estilos CSS. Tudo o que apresenta um caminho, pode ser encapsulado com
o Thymeleaf. O que tivemos que
acrescentar foi o namespace th: antes das propriedades que guardam o caminho dos
recursos, e englobar os caminhos com @{}. Muito simples
não é mesmo? Dessa forma, mudando o context-path,
não é preciso me preocupar, pois os recursos serão trazidos da mesma maneira.
Espero
ter ajudado. Abraços.
porque quando coloco
ResponderExcluirlink href="css/materialize.min.css" rel="stylesheet" type="text/css" media="screen"
funciona no meu pc mas ao colocar no servidor não funciona ?
Nesse caso acima você não está usando o thymeleaf. Pode ser que o context-path da aplicação seja diferente entre os ambientes. Também pode ser permissão na pasta onde estão os recursos. Na sua máquina a pasta pode ter a permissão e no servidor não.
Excluirtambem tenho ele da seguinte forma
ResponderExcluirlink th:href="@{/css/materialize.min.css}" rel="stylesheet" type="text/css" media="screen"
funciona tambem na minha máquina mas não no servidor, onde recebo um 404
Pode ser permissão na pasta onde estão os recursos. Na sua máquina a pasta pode ter a permissão e no servidor não. Os recursos estão em qual pasta? Mostra a hierarquia.
ResponderExcluir