摘要:如果還在使用以前的版本,想要使用非嚴格的,需要做以下配置在中引入依賴在中配置更多屬性配置請參考中模塊的屬性介紹。這樣的話很好的做到了前后端分離。
本文首發于:https://y0ngb1n.github.io/a/5...開發環境
引入依賴org.springframework.boot spring-boot-starter-parent 2.1.0.RELEASE 1.8
主要增加 spring-boot-starter-thymeleaf 依賴:
spring-boot-starter-thymeleaf:自動裝配 Thymeleaf 模板引擎
配置 Thymeleaf... ... org.springframework.boot spring-boot-starter-thymeleaf
application.yml
spring: thymeleaf: cache: false # 是否開啟模板緩存,默認為:true,開發時關閉緩存,不然沒法看到實時頁面! mode: HTML # 指定模板的模式,默認為:HTML encoding: UTF-8 # 指定模板的編碼,默認為:UTF-8 prefix: classpath:/templates/ # 指定模板的前綴,默認為:classpath:/templates/ suffix: .html # 指定模板的后綴,默認為:.html servlet: content-type: text/html # 指定 Content-Type 值,默認為:text/html
從 org.thymeleaf.templatemode.TemplateMode 中可見 Thymeleaf 從 3.0.0 版本開始使用 HTML 替代 HTML5、LEGACYHTML5、XHTML、VALIDXHTML。如果還在使用 3.0.0 以前的版本,想要使用非嚴格的 HTML,需要做以下配置:
在 pom.xml 中引入 nekohtml 依賴
在 application.yml 中配置 spring.thymeleaf.mode=LEGACYHTML5
更多屬性配置請參考「Appendix A. Common application properties」中 # THYMELEAF (ThymeleafAutoConfiguration) 模塊的屬性介紹。(TIPS:使用 CTRL + F 進行快速定位)
創建測試 Controller創建一個 Controller,為 message 屬性賦值并設置跳轉,代碼如下:
IndexController.java
@Controller public class IndexController { @GetMapping(path = {"/", "index"}) public String indexPage(Model model) { model.addAttribute("message", "Hello Thymeleaf!"); return "index"; } }創建測試 HTML 頁面
在 templates 目錄下創建 index.html 文件,并在 html 標簽中聲明 Thymeleaf 命名空間 xmlns:th="http://www.thymeleaf.org",代碼如下:
index.html
Thymeleaf Hello World!
其中關鍵的代碼是:
xmlns:th="http://www.thymeleaf.org"
主要是讓 IDE 識別 Thymeleaf 命名空間,這樣在標簽里輸入 th: 后,IDE 會提示相應的語法,方便開發!不加入這句代碼也不會影響 Thymeleaf 模板引擎的渲染,以及頁面的正常顯示。
測試訪問啟動成功后,訪問 http://127.0.0.1:8080,即可看到效果:
訪問結果:Hello Thymeleaf!
Thymeleaf 常用語法JAVA 源碼路徑:TagsController.java
HTML 源碼路徑:templates 目錄
獲取變量值name
可以看出獲取變量值用 $ 符號,對于 JavaBean 的話使用 變量名.屬性名 方式獲取,這點和 EL 表達式一樣。
另外 $ 表達式只能寫在 th 標簽內部,不然不會生效,上面例子就是使用 th:text 標簽的值替換
...
標簽里面的值,至于 p 里面的原有的值只是為了給前端開發時做展示用的。這樣的話很好的做到了前后端分離。 內容信息輸出:th:text 與 th:utextth:text:以純文本的方式輸出
th:utext:以 HTML 標簽的方式輸出,瀏覽器能正常渲染
HTML 代碼:
以純文本的方式輸出
以 HTML 標簽的方式輸出,瀏覽器能正常渲染
JAVA 代碼:
@GetMapping("/text-utext")
public String textAndutext(Model model) {
model.addAttribute("content", "thymeleaf text output");
return "text-utext";
}
引用 URL
對于 URL 的處理是通過語法 @{…} 來處理的:
HTML 代碼:
JAVA 代碼:
@GetMapping("/refer-url") public String referUrl(Model model) { model.addAttribute("username", "y0ngb1n"); return "refer-url"; }
類似的標簽有:th:href 和 th:src
字符串替換很多時候可能我們只需要對一大段文字中的某一處地方進行替換,可以通過字符串拼接操作完成:
可以用另一種更簡潔的方式:
文字替換本身可以和與其他表達式聯合使用:
當然這種形式限制比較多,|…| 中只能包含變量表達式 ${…},不能包含其他常量、條件表達式等。
HTML 代碼:
JAVA 代碼:
@GetMapping("replace-text") public String replaceText(Model model) { model.addAttribute("user", user); model.addAttribute("onevar", "one"); model.addAttribute("twovar", "two"); model.addAttribute("threevar", "three"); return "replace-text"; }運算符
在表達式中可以使用各類算術運算符,例如 +, -, *, /, %:
th:with="isEven=(${user.age} % 2 == 0)"
邏輯運算符 >, <, <=, >=, ==, != 都可以使用,唯一需要注意的是使用 <, > 時需要用它的 HTML 轉義符:
th:if="${user.age} > 1" th:text=""Environment is " + ((${env} == "dev") ? "Development" : "Production")"
HTML 代碼:
年齡為偶數
喲,才 18 吶!
當前年齡大于 18
JAVA 代碼:
@GetMapping("/operator") public String operator(Model model) { model.addAttribute("user", user); model.addAttribute("env", "dev"); return "operator"; }條件判斷 th:if, th:unless
使用 th:if 和 th:unless 屬性進行條件判斷,下面的例子中,標簽只有在 th:if 中條件成立時才顯示:
Login Login
th:unless 于 th:if 恰好相反,只有表達式中的條件不成立,才會顯示其內容。
th:switch, th:case支持多路選擇 Switch 結構:
User is an administrator
User is a manager
默認屬性 default 可以用 * 表示:
User is an administrator
User is a manager
User is some other thing
消息表達式:#{...},也稱為文本外部化、國際化或 i18n
HTML 代碼:
登錄歡迎,tony
User is an administrator
User is a manager
User is some other thing
JAVA 代碼:
@GetMapping("/condition") public String condition(Model model) { model.addAttribute("user", user); return "condition"; }循環
渲染列表數據是一種非常常見的場景,例如現在有 n 條記錄需要渲染成一個表格,該數據集合必須是可以遍歷的,使用 th:each 標簽:
HTML 代碼:
NAME | AGE | ADMIN |
---|---|---|
Onions | 22 | yes |
可以看到,需要在被循環渲染的元素(這里是)中加入 th:each 標簽,其中 th:each="prod : ${prods}" 意味著對集合變量 prods 進行遍歷,循環變量是 prod 在循環體中可以通過表達式訪問。
JAVA 代碼:
@GetMapping("/loop") public String loop(Model model) { Listusers = new ArrayList<>(3); users.add(user); users.add(User.builder().name("tony").age(23).role("user").build()); users.add(User.builder().name("tom").age(21).role("user").build()); model.addAttribute("users", users); return "loop"; }
更多標簽用法請參考「Thymeleaf 常用語法」、「Thymeleaf 參考手冊」解鎖更多技巧
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72480.html
摘要:使用則需要及以上版本。開發使用框架七系列教程目錄系列教程大綱快速入門實踐實踐整合整合中和實踐整合中實現緩存中實現通信集成測試及部署實戰圖書管理系統 WebFlux 系列教程大綱 一、背景 大家都知道,Spring Framework 是 Java/Spring 應用程序跨平臺開發框架,也是 Java EE(Java Enterprise Edition) 輕量級框架,其 Spring ...
摘要:響應式編程是基于異步和事件驅動的非阻塞程序,只是垂直通過在內啟動少量線程擴展,而不是水平通過集群擴展。三特性常用的生產的特性如下響應式編程模型適用性內嵌容器組件還有對日志消息測試及擴展等支持。 摘要: 原創出處 https://www.bysocket.com 「公眾號:泥瓦匠BYSocket 」歡迎關注和轉載,保留摘要,謝謝! 02:WebFlux 快速入門實踐 文章工程: JDK...
摘要:數據和信息是不可分離的,數據是信息的表達,信息是數據的內涵。數據本身沒有意義,數據只有對實體行為產生影響時才成為信息。主要目標是為開發提供天然的模板,并且能在里面準確的顯示。目前是自然更加推薦。 這是泥瓦匠的第105篇原創 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-4-thym...
摘要:在使用上述模板,默認從下加載。介紹是現代化服務器端的模板引擎,不同與其它幾種模板的是的語法更加接近,并且具有很高的擴展性。特點支持無網絡環境下運行,由于它支持原型,然后在標簽里增加額外的屬性來達到模板數據的展示方式。 SpringBoot 是為了簡化 Spring 應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,...
閱讀 2042·2021-11-11 16:54
閱讀 2115·2019-08-30 15:55
閱讀 3616·2019-08-30 15:54
閱讀 395·2019-08-30 15:44
閱讀 2235·2019-08-30 10:58
閱讀 430·2019-08-26 10:30
閱讀 3054·2019-08-23 14:46
閱讀 3197·2019-08-23 13:46