<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前端模板引擎技術的出現,使前端開發人員無需關注後端業務的具體實現,只關注自己頁面的呈現效果即可,並且解決了前端程式碼錯綜複雜的問題、實現了前後端分離開發。Spring Boot框架對很多常用的
模板引擎技術(如:FreeMarker、Thymeleaf、Mustache等)提供了整合支援
Spring Boot不太支援常用的JSP模板,並且沒有提供對應的整合設定,這是因為使用嵌入式Servlet容器的Spring Boot應用程式對於JSP模板存在一些限制 :
上面對Spring Boot支援的模板引擎進行了介紹,並指出了整合JSP模板的一些限制。接下來,對其中常用的Thymeleaf模板引擎進行介紹,並完成與Spring Boot框架的整合實現
Thymeleaf是一種現代的基於伺服器端的Java模板引擎技術,也是一個優秀的面向Java的XML、XHTML、HTML5頁面模板,它具有豐富的標籤語言、函數和表示式,在使用Spring Boot框架進行頁面設計時,一般會選擇Thymeleaf模板
常用標籤
在HTML頁面上使用Thymeleaf標籤,Thymeleaf 標籤能夠動態地替換掉靜態內容,使頁面動態展示。為了大家更直觀的認識Thymeleaf,下面展示一個在HTML檔案中嵌入了Thymeleaf的頁面檔案,範例代
碼如下:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" media="all" href="../../css/gtvg.css" rel="external nofollow" th:href="@{/css/gtvg.css}" rel="external nofollow" /> <title>Title</title> </head> <body> <p th:text="${hello}">歡迎進入Thymeleaf的學習</p> </body> </html>
上述程式碼中,“xmlns:th=“http://www.thymeleaf.org”“ 用於引入Thymeleaf模板引擎標籤,使用關鍵字“th”標註標籤是Thymeleaf模板提供的標籤,其中,“th:href”用於引入外聯樣式檔案,“th:text”用於動態顯示標籤文字內容。
除此之外,Thymeleaf模板提供了很多標籤,接下來,通過一張表羅列Thymeleaf的常用標籤
Thymeleaf模板引擎提供了多種標準表示式語法,在正式學習之前,先通過一張表來展示其主要語法及說明
變數表示式${…}主要用於獲取上下文中的變數值,範例程式碼如下:
<p th:text="${title}">這是標題</p>
範例使用了Thymeleaf模板的變數表示式${…}用來動態獲取P標籤中的內容,如果當前程式沒有啟動或者當前上下文中不存在title變數,該片段會顯示標籤預設值“這是標題”;如果當前上下文中存在title變數
並且程式已經啟動,當前P標籤中的預設文字內容將會被title變數的值所替換,從而達到模板引擎頁面資料動態替換的效果
同時,Thymeleaf為變數所在域提供了一些內建物件,具體如下所示
# ctx:上下文物件
# vars:上下文變數
# locale:上下文區域設定
# request:(僅限Web Context)HttpServletRequest物件
# response:(僅限Web Context)HttpServletResponse物件
# session:(僅限Web Context)HttpSession物件
# servletContext:(僅限Web Context)ServletContext物件
結合上述內建物件的說明,假設要在Thymeleaf模板引擎頁面中動態獲取當前國家資訊,可以使用#locale內建物件,範例程式碼如下
The locale country is: <span th:text="${#locale.country}">US</span>.
上述程式碼中,使用th:text="${#locale.country}"動態獲取當前使用者所在國家資訊,其中標籤內預設內容為US(美國),程式啟動後通過瀏覽器檢視當前頁面時,Thymeleaf會通過瀏覽器語言設定來識別當前使用者所在國家資訊,從而實現動態替換
選擇變數表示式和變數表示式用法類似,一般用於從被選定物件而不是上下文中獲取屬性值,如果沒有選定物件,則和變數表示式一樣,範例程式碼如下
<div th:object="${book}"> <p>titile: <span th:text="*{title}">標題</span>.</p> </div
*{title} 選擇變數表示式獲取當前指定物件book的title屬性值。
訊息表示式#{…}主要用於Thymeleaf模板頁面國際化內容的動態替換和展示,使用訊息表示式#{…}進行國際化設定時,還需要提供一些國際化組態檔。
連結表示式@{…}一般用於頁面跳轉或者資源的引入,在Web開發中佔據著非常重要的地位,並且使用也非常頻繁,範例程式碼如下:
<a th:href="@{http://localhost:8080/order/details(orderId=${o.id})}" rel="external nofollow" >view</a> <a th:href="@{/order/details(orderId=${o.id},pid=${p.id})}" rel="external nofollow" >view</a>
上述程式碼中,連結表示式@{…}分別編寫了絕對連結地址和相對連結地址。在有參表示式中,需要按照@{路徑(引數名稱=引數值,引數名稱=引數值…)}的形式編寫,同時該引數的值可以使用變數表示式來傳遞動態引數值
片段表示式~{…}用來標記一個片段模板,並根據需要移動或傳遞給其他模板。其中,最常見的用法是使用th:insert或th:replace屬性插入片段,範例程式碼如下:
<div th:insert="~{thymeleafDemo::title}"></div>
上述程式碼中,使用th:insert屬性將title片段模板參照到該標籤中。thymeleafDemo為模板名稱,Thymeleaf會自動查詢 “/resources/templates/” 目錄下的thymeleafDemo模板,title為片段名稱
首先 在Spring Boot專案中使用Thymeleaf模板,首先必須保證引入Thymeleaf依賴,範例程式碼如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
其次,在全域性組態檔中設定Thymeleaf模板的一些引數。一般Web專案都會使用下列設定,範例程式碼如:
spring.thymeleaf.cache = true #啟用模板快取
spring.thymeleaf.encoding = UTF_8 #模板編碼
spring.thymeleaf.mode = HTML5 #應用於模板的模板模式
spring.thymeleaf.prefix = classpath:/templates/ #指定模板頁面存放路徑
spring.thymeleaf.suffix = .html #指定模板頁面名稱的字尾
上述設定中,spring.thymeleaf.cache表示是否開啟Thymeleaf模板快取,預設為true,在開發過程中通常會關閉快取,保證專案偵錯過程中資料能夠及時響應;spring.thymeleaf.prefix指定了Thymeleaf模板頁面的存放路徑,預設為classpath:/templates/;spring.thymeleaf.suffix指定了Thymeleaf模板頁面的名稱字尾,預設為.html
開發Web應用時,難免需要使用靜態資源。Spring boot預設設定了靜態資源的存取路徑。
使用Spring Initializr方式建立的Spring Boot專案,預設生成了一個resources目錄,在resources目錄中新建public、resources、static三個子目錄下,Spring boot預設會挨個從public、resources、static裡面查詢靜態資源
引入Thymeleaf依賴
開啟application.properties全域性組態檔,在該檔案中對Thymeleaf模板頁面的資料快取進行設定
# thymeleaf頁面快取設定(預設為true),開發中方便偵錯應設定為false,上線穩定後應保持預設
true
spring.thymeleaf.cache=false
使用“spring.thymeleaf.cache=false”將Thymeleaf預設開啟的快取設定為了false,用來關閉模板頁面快取
在專案中建立名為com.lagou.controller的包,並在該包下建立一個用於前端模板頁面動態資料替換效果測試的存取實體類LoginController
@Controller public class LoginController { /** * 獲取並封裝當前年份跳轉到登入頁login.html */ @RequestMapping("/toLoginPage") public String toLoginPage(Model model){ model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR)); return "login"; }
toLoginPage()方法用於向登入頁面login.html跳轉,同時攜帶了當前年份資訊currentYear。
在“classpath:/templates/”目錄下引入一個使用者登入的模板頁面login.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1,shrink- to-fit=no"> <title>使用者登入介面</title> <link th:href="@{/login/css/bootstrap.min.css}" rel="external nofollow" rel="stylesheet"> <link th:href="@{/login/css/signin.css}" rel="external nofollow" rel="stylesheet"> </head> <body class="text-center"> <!-- 使用者登入form表單 --> <form class="form-signin"> <img class="mb-4" th:src="@{/login/img/login.jpg}" width="72" height="72"> <h1 class="h3 mb-3 font-weight-normal">請登入</h1> <input type="text" class="form-control" th:placeholder="使用者名稱" required="" autofocus=""> <input type="password" class="form-control" th:placeholder="密碼" required=""> <div class="checkbox mb-3"> <label> <input type="checkbox" value="remember-me"> 記住我 </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit" >登入</button> <p class="mt-5 mb-3 text-muted">© <span th:text="${currentYear}">2019</span>-<span th:text="${currentYear}+1">2020</span></p> </form> </body> </html>
通過“xmlns:th=“http://www.thymeleaf.org””引入了Thymeleaf模板標籤;
使用“th:href”和“th:src”分別引入了兩個外聯的樣式檔案和一個圖片;
使用“th:text”引入了後臺動態傳遞過來的當前年份currentYear
到此這篇關於SpringBoot詳細講解檢視整合引擎thymeleaf的文章就介紹到這了,更多相關SpringBoot thymeleaf內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45