当前位置: 首页 > article >正文

spring boot + thymeleaf整合完整例子

以下是一个完整的 Spring Boot + Thymeleaf 整合示例,包含项目结构、代码和运行说明:


1. 项目依赖配置(Maven)

pom.xml 中添加 Thymeleaf 依赖:

<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

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

    <!-- Spring Boot DevTools (可选,用于热更新) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

2. 项目结构

src/
├── main/
│   ├── java/
│   │   └── com.example.demo/
│   │       ├── DemoApplication.java      // 启动类
│   │       └── controller/               // 控制器包
│   │           └── HelloController.java  // 示例控制器
│   └── resources/
│       ├── static/                       // 静态资源(CSS/JS)
│       ├── templates/                    // Thymeleaf 模板文件
│       │   └── hello.html               // 示例模板
│       └── application.properties        // 配置文件(可选)
└── test/
    └── ...                               // 测试代码

3. 启动类(DemoApplication.java)

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

4. 控制器(HelloController.java)

package com.example.demo.controller;

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

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        // 向模板传递数据
        model.addAttribute("name", "Thymeleaf");
        model.addAttribute("users", new String[]{"Alice", "Bob", "Charlie"});
        return "hello"; // 对应 templates/hello.html
    }
}

5. Thymeleaf 模板(hello.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Thymeleaf Example</title>
</head>
<body>
    <h1 th:text="'Hello, ' + ${name} + '!'">Default Text</h1>
    
    <!-- 条件判断 -->
    <p th:if="${users.size() > 0}">Users list:</p>
    <ul>
        <!-- 遍历用户列表 -->
        <li th:each="user : ${users}" th:text="${user}"></li>
    </ul>

    <!-- 表单示例 -->
    <form action="#" th:action="@{/submit}" method="post">
        <input type="text" th:field="*{username}" placeholder="Enter name">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

6. 配置(application.properties 可选)

# Thymeleaf 配置(可选,默认配置已足够)
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.cache=false # 开发时关闭缓存

7. 运行与验证

  1. 启动应用:运行 DemoApplicationmain 方法。
  2. 访问 http://localhost:8080/hello,页面显示:
    • 标题:Hello, Thymeleaf!
    • 用户列表:Alice, Bob, Charlie
    • 表单输入框

关键点总结

功能实现方式
模板路径src/main/resources/templates/ 目录下的 HTML 文件,后缀为 .html.xhtml
数据绑定通过 Model 对象传递数据到模板,使用 ${variable} 语法引用变量
条件渲染th:if, th:unless 控制元素显示
循环遍历th:each 遍历集合数据
表单绑定th:field 自动绑定表单字段到后端对象

扩展示例:带表单提交的控制器

@Controller
public class FormController {

    @GetMapping("/form")
    public String showForm(Model model) {
        model.addAttribute("user", new User()); // 表单对象
        return "form";
    }

    @PostMapping("/submit")
    public String submitForm(@ModelAttribute User user) {
        // 处理提交数据
        return "redirect:/success";
    }
}

对应的表单模板 form.html

<form th:object="${user}" action="#" th:action="@{/submit}" method="post">
    <input type="text" th:field="*{name}" placeholder="Name">
    <input type="email" th:field="*{email}" placeholder="Email">
    <button type="submit">Submit</button>
</form>

http://www.kler.cn/a/610870.html

相关文章:

  • 婚姻的解构与重构 | 一场关于选择与责任的探索
  • 二叉树相关算法实现:判断子树与单值二叉树
  • ISIS-3 LSDB链路状态数据库同步
  • mysql-connector-java-5.1.37.jarJava连接器
  • C++智能指针万字详细讲解(包含智能指针的模拟实现)
  • 算法设计——最坏时间复杂度分析
  • 美摄科技开启智能汽车车内互动及娱乐解决方案2.0
  • Ajax与Axios,以及Apifox的入门使用
  • 《Python实战进阶》No35:循环神经网络(RNN)时间序列预测
  • Canvas终极绘制指南:从基础图形到动态交互的全链路实现
  • ENSP学习day10
  • 数据结构:利用递推式计算next表
  • 《jQuery Mobile 页面:深入解析与优化实践》
  • 接口/UI自动化面试题
  • 力扣hot100_二分查找
  • 在线问卷调查|在线问卷调查系统|基于Spring Boot的在线问卷调查系统的设计与实现(源码+数据库+文档)
  • node-red dashboard
  • 在 ASP .NET Core 9.0 中使用 Scalar 创建漂亮的 API 文档
  • Android14 原生PackageInstaller安装某些apk报错问题
  • Qt的文件操作