Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
言
在現(xiàn)代Web開發(fā)中,動(dòng)態(tài)生成的菜單不僅能夠提升用戶體驗(yàn),還能簡(jiǎn)化應(yīng)用程序的維護(hù)工作。Thymeleaf作為一款流行的服務(wù)器端Java模板引擎,提供了豐富的標(biāo)簽和表達(dá)式語法,使得動(dòng)態(tài)內(nèi)容的生成變得簡(jiǎn)單而高效。本文將深入解析如何使用Thymeleaf來創(chuàng)建動(dòng)態(tài)菜單,并通過代碼示例來演示其實(shí)際應(yīng)用。
Thymeleaf是一個(gè)用于Web和獨(dú)立環(huán)境的現(xiàn)代服務(wù)器端Java模板引擎。它支持HTML、XML、JSF和Velocity模板,并且可以很好地與Spring框架集成。Thymeleaf的一大特點(diǎn)就是能夠處理靜態(tài)和動(dòng)態(tài)內(nèi)容,這意味著即使在沒有后端數(shù)據(jù)的情況下,模板仍然能夠正確顯示。
在Web應(yīng)用中,動(dòng)態(tài)菜單通常是從后端獲取數(shù)據(jù),然后在前端根據(jù)這些數(shù)據(jù)動(dòng)態(tài)生成菜單結(jié)構(gòu)。Thymeleaf通過其特有的語法,可以輕松地將后端數(shù)據(jù)綁定到HTML元素上,從而實(shí)現(xiàn)動(dòng)態(tài)內(nèi)容的填充。
假設(shè)我們有一個(gè)簡(jiǎn)單的JavaBean代表菜單項(xiàng):
public class MenuItem {
private String name;
private String url;
private List<MenuItem> children;
// 省略構(gòu)造函數(shù)、getter和setter...
}
后端控制器將返回一個(gè)菜單列表:
@GetMapping("/menu")
public List<MenuItem> getMenuList() {
// 假設(shè)這里從數(shù)據(jù)庫或緩存中獲取菜單數(shù)據(jù)
return menuService.getAllMenus();
}
在Thymeleaf模板中,我們可以使用th:each和th:if標(biāo)簽來遍歷菜單項(xiàng),并根據(jù)條件渲染菜單結(jié)構(gòu):
<!-- index.html -->
<ul th:each="item : ${menuList}">
<li>
<a th:href="${item.url}" th:text="${item.name}"></a>
<!-- 如果有子菜單,遞歸渲染 -->
<ul th:if="${!#lists.isEmpty(item.children)}">
<li th:each="child : ${item.children}">
<a th:href="${child.url}" th:text="${child.name}"></a>
</li>
</ul>
</li>
</ul>
在上述代碼中,th:each用于迭代menuList中的每一項(xiàng),th:href和th:text分別用于設(shè)置鏈接的URL和顯示的文本。當(dāng)item.children不為空時(shí),會(huì)進(jìn)一步渲染子菜單。
結(jié)語
通過本文的學(xué)習(xí),你已經(jīng)掌握了如何使用Thymeleaf來創(chuàng)建動(dòng)態(tài)菜單的基本方法。動(dòng)態(tài)菜單不僅能夠提高Web應(yīng)用的靈活性,還能顯著提升用戶體驗(yàn)。在實(shí)際項(xiàng)目中,可以根據(jù)具體需求進(jìn)一步優(yōu)化和擴(kuò)展菜單功能,比如加入搜索、過濾和排序等功能,讓菜單更加智能和人性化。
#頭條創(chuàng)作挑戰(zhàn)賽#
言:
為了后續(xù)的代碼審計(jì)一些常用的框架和技術(shù)都是有必要了解一下,在此重拾Spring Boot等開發(fā)知識(shí)內(nèi)容。
Thymeleaf是一個(gè)現(xiàn)代的服務(wù)器端Java模板引擎的web和獨(dú)立的環(huán)境,能夠處理HTML, XML, JavaScript, CSS,甚至純文本。
Thymeleaf的主要目標(biāo)是提供一種優(yōu)雅的和高度可維護(hù)的方式來創(chuàng)建模板。為了實(shí)現(xiàn)這一點(diǎn),它構(gòu)建在自然模板的概念上,以不影響模板作為設(shè)計(jì)原型使用的方式將其邏輯注入模板文件。這改進(jìn)了設(shè)計(jì)的交流,并在設(shè)計(jì)和開發(fā)團(tuán)隊(duì)之間架起了橋梁。
Thymeleaf的設(shè)計(jì)從一開始就考慮了Web標(biāo)準(zhǔn),尤其是HTML5
Thymeleaf是一個(gè)非常可擴(kuò)展的模板引擎(事實(shí)上它可以被稱為模板引擎框架),它允許你定義和自定義的方式,你的模板將被處理到一個(gè)精細(xì)的細(xì)節(jié)級(jí)別。
將一些邏輯應(yīng)用到標(biāo)記工件(標(biāo)記、一些文本、注釋,如果模板不是標(biāo)記,則僅僅是占位符)的對(duì)象稱為處理程序,這些處理程序的集合—加上一些額外的工件—通常是方言的組成部分。Thymeleaf的核心庫提供了一種稱為標(biāo)準(zhǔn)方言的方言,這對(duì)大多數(shù)用戶來說應(yīng)該足夠了。
這里主要以Srping Boot為主
<!--引入thymeleaf依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在項(xiàng)目的resources\templates目錄下創(chuàng)建HTML文件,這里注意導(dǎo)入thymeleaf的命名空間,否則無法進(jìn)行模板的渲染。
<!doctype html>
<!--注意:引入thymeleaf的名稱空間-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p th:text="'hello SpringBoot'">hello thymeleaf</p>
</body>
</html>
編寫Controller
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class IndexController {
@GetMapping("home")
public String index() {
return "index";
}
}
這里的注解需要使用@Controller,不能使用@RestController注解,否則會(huì)報(bào)錯(cuò).
<span th:text="${book.author.name}">
<li th:each="book : ${books}">
@{/order/list}
@{/order/details(id=${orderId})}
或者是
<form th:action="@{/createOrder}">
<a href="main.html" th:href="@{/main}">
#{main.title}
#{message.entrycreated(${entryId})}
<div th:object="${book}">
...
<span th:text="*{title}">...</span>
...
</div>
th標(biāo)簽屬性
1)th:text:文本替換;
2)th:utext:支持html的文本替換。
3)th:value:屬性賦值
4)th:each:遍歷循環(huán)元素
5)th:if:判斷條件,類似的還有th:unless,th:switch,th:case
6)th:insert:代碼塊引入,類似的還有th:replace,th:include,常用于公共代碼塊提取的場(chǎng)景
7)th:fragment:定義代碼塊,方便被th:insert引用
8)th:object:聲明變量,一般和*{}一起配合使用,達(dá)到偷懶的效果。
9)th:attr:設(shè)置標(biāo)簽屬性,多個(gè)屬性可以用逗號(hào)分隔
內(nèi)容比較簡(jiǎn)單,主要作為記錄。
模板技術(shù)在現(xiàn)代的軟件開發(fā)中有著重要的地位,而目前最流行的兩種模板技術(shù)恐怕要算freemarker和Thymeleaf了,模板技術(shù)作為view的好處是很多,那么現(xiàn)在開源的模板技術(shù)有好幾種,多了之后就有一個(gè)選擇的問題了,如何選擇一個(gè)滿足自己需要的模板的呢
介紹
FreeMarker是一款模板引擎: 是一種基于模板和數(shù)據(jù),用來生成輸出文本(HTML網(wǎng)頁、電子郵件、配置文件、源代碼等)的通用工具。 它不是面向最終用戶的,是一款程序員可以嵌入他們所開發(fā)產(chǎn)品的組件。FreeMarker是免費(fèi)的,基于Apache許可證2.0版本發(fā)布。其模板編寫為FreeMarker Template Language(FTL),F(xiàn)TL包含模板信息和數(shù)據(jù)標(biāo)簽與指令,使用FTL和數(shù)據(jù)通過模板引擎可以生成需要的文檔或代碼。FreeMarker最初的設(shè)計(jì),是被用來在MVC模式的Web開發(fā)框架中生成HTML頁面的,沒有被綁定到Servlet或HTML或任意Web相關(guān)的東西上,它也可以用于非Web應(yīng)用環(huán)境中。
特性
FreeMarker的優(yōu)點(diǎn)
FreeMarker 的缺點(diǎn)
介紹
Thymeleaf是一種用于Web和獨(dú)立環(huán)境的現(xiàn)代服務(wù)器端的Java模板引擎。Thymeleaf的主要目標(biāo)是將優(yōu)雅的自然模板帶到開發(fā)工作流程中,并將HTML在瀏覽器中正確顯示,并且可以作為靜態(tài)原型,讓開發(fā)團(tuán)隊(duì)能更容易地協(xié)作。Thymeleaf能夠處理HTML,XML,JavaScript,CSS甚至純文本。Thymeleaf使用Spring框架的模塊,與許多常見的工具集成在一起,并且可以插入自己的功能,是現(xiàn)代HTML5 JVM Web開發(fā)的理想選擇,盡管Thymeleaf還有更多其它的功能。Thymeleaf建立在自然模板的概念之上,以不影響模板作為設(shè)計(jì)原型的方式將其邏輯注入到模板文件中。 這改善了設(shè)計(jì)溝通,彌合了前端設(shè)計(jì)和開發(fā)人員之間的理解偏差。
特點(diǎn)
Thymeleaf的優(yōu)點(diǎn)
Thymeleaf的缺點(diǎn)
從寫代碼的角度看,freemarker更習(xí)慣于我們的思維。從前后分離開發(fā)的角度看thymeleaf更合適,值的綁定都是基于html的dom元素屬性的,適合前后聯(lián)調(diào)。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。