Spring MVC中使用Thymeleaf模板引擎

由Ricky發表在天碼營

新一代Java模板引擎Thymeleaf一定讓你驚嘆於Thymeleaf的強大,但是真正在Web應用結合Web特性使用模板引擎,還需要進行一定的配置和學習。

Thymeleaf於Spring集成

Thymeleaf除了基本的模板引擎,還提供了一套Spring集成技術使得在Spring MVC中能夠使用它完全替代JSP作為模板引擎,它的功能特性如下:

  • Spring MVC中@Controller中的方法可以直接返回模板名稱,接下來Thymeleaf模板引擎會自動進行渲染
  • 模板中的表達式支持Spring表達式語言(Spring EL)
  • 表單支持,併兼容Spring MVC的數據綁定與驗證機制
  • 國際化支持

如果你還不了解Thymeleaf,請一定先閱讀新一代Java模板引擎Thymeleaf。

配置TemplateEngine

<bean id="templateResolver"n class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">n <property name="prefix" value="/WEB-INF/templates/" />n <property name="suffix" value=".html" />n <property name="templateMode" value="HTML5" />n</bean>nn<bean id="templateEngine"n class="org.thymeleaf.spring4.SpringTemplateEngine">n <property name="templateResolver" ref="templateResolver" />n</bean>n

上述配置的TemplateEngine從/WEB-INF/templates/目錄中讀取文件夾,默認的後綴名是.html,所以在渲染模板時只需要提供模板的名字(例如index.html可以省略為index),TemplateEngine就可以找到對應的模板內容。

為了能夠方便的讓@Controller進行渲染(類似JSP),例如:

@Controllernpublic class IndexController {nn @RequestMapping("/")n public String index() {n return "index";n }n}n

還需要配置Spring中的ViewResolver:

<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">n <property name="templateEngine" ref="templateEngine" />n</bean>n

@Controller

Spring MVC中@Controller用於處理HTTP請求並返回內容到瀏覽器。在渲染模板前,ThymeleafViewResolver會自動把當前的Model加入到Context中:

@Controllernpublic class IndexController {nn @RequestMapping("/")n public String index(Model model) {n model.addAttribute("list", Lists.newArrayList("a", "b", "c"));n return "index";n }n}n

這樣在index模板中可以訪問表達式${list}得到`["a", "b", "c"]的值。

表單

Command對象用來在Spring MVC中綁定表單與後端對象,Thymeleaf提供的th:object屬性可以用來指定Command對象:

<form action="#" th:action="@{/}" th:object="${command}" method="post">n <label>Title</label>n <input type="text" th:field="*{title}"/>n <label>Text</label>n <input type="text" th:field="*{text}"/>n <br/>n <input type="submit" value="Add"/>n</form>nn<div>n <div th:each="entry: ${entries}">n <h2 th:text="${entry.title}">Title</h2>n <p th:text="${entry.text}">Text</p>n </div>n</div>n

指定th:object屬性後,各個<input>中還需要指定th:field,這與後端綁定對象的欄位名要一致。在@Controller中的方法如下:

@RequestMapping(value = "/", method = GET)npublic String index(Model model) {n model.addAttribute("entries", getAll());n model.addAttribute("command", new Entry());n return "index";n}nn@RequestMapping(value = "/", method = POST)npublic String post(Entry entry) {n add(entry.title, entry.text);nn return "redirect:/";n}n

post()方法的參數Entry entry是根據HTTP請求的輸入title和text值自動進行的綁定。

在Spring Boot中使用Thymeleaf

Spring Boot能夠簡化Spring應用配置、加速開發,對於Thymeleaf模板引擎提供了內置支持,在Spring Boot應用中只需要引入:

<dependency>n <groupId>org.springframework.boot</groupId>n <artifactId>spring-boot-starter-thymeleaf</artifactId>n</dependency>n

所有Thymeleaf的相關依賴都會被載入到類路徑中,更重要的是,上文中所有TemplateEngine,ThymeleafViewResolver等bean都在應用啟動後被自動實例化,默認情況下模板的目錄位於src/main/resources/templates/文件夾中,所以開發者只需要在這個文件夾中添加模板文件即可。

如果需要改變一些配置,可以在application.properties中寫入:

spring.thymeleaf.prefix=classpath:/templates/nspring.thymeleaf.suffix=.htmlnspring.thymeleaf.mode=HTML5nspring.thymeleaf.encoding=UTF-8nspring.thymeleaf.content-type=text/html # ;charset=<encoding> is addedn

改變這些配置的值,也就會自動改變Spring Boot幫助我們實例化的bean的配置。

歡迎關注天碼營微信公眾號: TMY-EDU

小編重點推薦:

Spring MVC實戰入門訓練

Spring Data JPA實戰入門訓練

Java Web實戰訓練

Node.js全棧開發

更多精彩內容請訪問天碼營網站
推薦閱讀:

史上最簡單的SpringCloud教程 | 第二篇:服務消費者(rest + ribbon)
史上最簡單的 SpringCloud 教程(1) 服務的註冊與發現(Eureka)
jsonp跨域請求詳解——從繁至簡
Spring Security(一) -- 初識Spring Security

TAG:Spring | SpringBoot | SpringMVC框架 |