Java Spring Boot bài 4: Tổng quan Thymeleaf – template engine cho Spring Boot

Java Spring Boot Bài 1: Giới Thiệu Về Spring Boot

🎯 Mục tiêu bài học

  • Hiểu được Thymeleaf là gì và vai trò trong Spring Boot-
  • Biết cách truyền dữ liệu từ Controller sang View-
  • Hiển thị dữ liệu bằng cú pháp Thymeleaf (th:text, th:each, th:if,…)-
  • Làm việc với danh sách dữ liệu (List)-
  • Biết sử dụng fragment để chia nhỏ và tái sử dụng giao diện.

📖 1. Thymeleaf là gì?

Thymeleaf là một template engine mạnh mẽ dùng để xây dựng giao diện HTML trong ứng dụng Spring Boot. Nó cho phép:

  • Thymeleaf là một template engine giúp render HTML động.
  • Hiển thị dữ liệu từ controller vào view (HTML).
  • Tương thích tốt với HTML5.
  • Hỗ trợ logic điều kiện, lặp, định dạng dữ liệu, layout engine…
  • Được tích hợp chặt chẽ với Spring MVC.
  • Ưu điểm:
    • Viết HTML đúng chuẩn.
    • Giao diện xem được cả khi chưa chạy backend.
    • Dễ tích hợp các điều kiện, vòng lặp, xử lý logic đơn giản ngay trong HTML.

📌 Thymeleaf thay thế tốt cho JSP, đồng thời giữ nguyên cấu trúc HTML để dễ thiết kế.

🛠 2. Cấu hình Thymeleaf trong Spring Boot

Spring Boot đã tích hợp sẵn Thymeleaf, nếu bạn đã thêm dependency sau trong pom.xml, thì không cần cấu hình thêm:

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

🗂 3. Truyền dữ liệu đơn giản từ Controller sang HTML

Tạo Controller mới: GreetingController.java

package com.yourcompany.banhang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class GreetingController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("name", "Lập Trình Web Spring Boot"); 
        return "hello";
    }
}

🧾 4. Tạo file hello.html trong thư mục templates

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Xin chào</title>
</head>
<body>
    <h2>Xin chào, <span th:text="${name}">[Tên]</span>!</h2>
</body>
</html>

📝 th:text="${name}" dùng để hiển thị giá trị biến name từ controller truyền vào.

🔍 5. Giải thích cú pháp Thymeleaf cơ bản

Cú phápÝ nghĩa
th:textHiển thị nội dung (text)
th:if / th:unlessĐiều kiện hiển thị
th:eachLặp qua danh sách
th:href, th:srcGán link động
${}Truy cập biến từ controller

🚀 6. Chạy thử

Chạy ứng dụng, mở trình duyệt truy cập:

http://localhost:8080/hello

Kết quả hiển thị:

Lập Trình Web Spring Boot

7. Truyền dữ liệu dạng List và hiển thị bằng th:each

@GetMapping("/products")
public String productList(Model model) {
    List<String> products = Arrays.asList("Laptop", "Điện thoại", "Tablet");
    model.addAttribute("products", products);
    return "product-list";
}

<!-- product-list.html -->
<ul>
    <li th:each="p : ${products}" th:text="${p}"></li>
</ul>

8. Chạy lại server và truy cập

http://localhost:8080/products

👉 Kết quả: danh sách các sản phẩm được hiển thị dưới dạng <li>.

9. Sử dụng Fragment để chia nhỏ và tái sử dụng giao diện

Fragment trong Thymeleaf là một đoạn giao diện HTML có thể tái sử dụng, thường dùng để tách các phần như header, footer, navbar, giúp giao diện gọn gàng và dễ bảo trì.
📌 Ví dụ: bạn chỉ cần tạo header.html một lần, sau đó có thể chèn vào nhiều trang khác nhau bằng cú pháp th:replace hoặc th:insert.

🧩 Tạo file fragment header.html:

<!-- header.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
  <div th:fragment="siteHeader">
    <header>
      <h2>🛒 Spring Boot Shop</h2>
    </header>
  </div>
</body>
</html>

👉 Chèn fragment vào trang khác:

<!-- index.html -->
<html xmlns:th="http://www.thymeleaf.org">
<body>
  <div th:replace="header :: siteHeader"></div>
  <h2>Chào mừng đến với website bán hàng!</h2>
</body>
</html>

📌 Giải thích:

th:replace="header :: siteHeader" sẽ nhúng đoạn đó vào trang đang hiển thị.

th:fragment="siteHeader" định nghĩa một đoạn giao diện có thể tái sử dụng.

✅ Kết luận

Qua bài học này, bạn đã:

  • Hiển thị dữ liệu động bằng cú pháp th:text, th:each.
  • Làm quen với Thymeleaf – công cụ giao diện của Spring Boot.
  • Biết cách truyền dữ liệu từ Controller đến View.
  • Biết cách chia nhỏ giao diện và tái sử dụng các thành phần bằng fragment

Total
0
Shares
Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Previous Post
Java Spring Boot Bài 1: Giới Thiệu Về Spring Boot

Java Sprint Boot bài 3: Tạo dự án Spring Boot cho ứng dụng web bán hàng

Next Post
Java Spring Boot Bài 1: Giới Thiệu Về Spring Boot

Java Spring Boot bài 5: Cấu trúc dự án bán hàng và tổ chức giao diện với Thymeleaf Layout

Related Posts