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

Themeleaf复用功能

Themeleaf复用功能

Thymeleaf 的复用功能能够有效减少代码冗余,提升开发效率,让代码更易于维护。以下为你详细介绍几种常见的复用功能:

1. 片段复用(Fragments)
定义片段

借助 th:fragment 指令,可将页面的部分代码定义成可复用的片段。片段能定义在单独的文件里,也可以和使用它的页面处于同一文件中。
示例:在 fragments.html 文件中定义片段:

html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
    <!-- 定义一个简单的头部片段 -->
    <div th:fragment="header">
        <h1>网站头部</h1>
    </div>
    <!-- 定义一个带参数的侧边栏片段 -->
    <div th:fragment="sidebar(title)">
        <h2 th:text="${title}">默认侧边栏标题</h2>
        <ul>
            <li>菜单项 1</li>
            <li>菜单项 2</li>
        </ul>
    </div>
</body>
</html>
使用片段

利用 th:replace 或者 th:insert 指令来引入片段。
th:replace 会用片段内容替换当前标签
th:insert 会把片段内容插入到当前标签内部。
示例:在 index.html 文件中使用上述片段:

html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>首页</title>
</head>
<body>
    <!-- 引入头部片段 -->
    <div th:replace="fragments :: header"></div>
    <!-- 引入侧边栏片段并传递参数 -->
    <div th:replace="fragments :: sidebar(title='特色侧边栏')"></div>
    <p>这是首页的主要内容。</p>
</body>
</html>

2. 布局复用(Layouts)

定义布局模板

借助 Thymeleaf Layout Dialect 或者类似的扩展,能够创建布局模板,把页面的公共部分(像头部、底部、导航栏等)提取出来。
示例:创建 layout.html 布局模板:

html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
    <title th:text="${title}">默认标题</title>
    <meta charset="UTF-8">
</head>
<body>
    <header>
        <h1>全局头部</h1>
    </header>
    <!-- 内容区域,子页面将替换此部分 -->
    <section layout:fragment="content">
        <p>默认内容</p>
    </section>
    <footer>
        <p>全局底部</p>
    </footer>
</body>
</html>
使用布局模板

在具体页面里使用 layout:decorate 指令指定要使用的布局模板,再用 layout:fragment 指令替换布局模板里的特定片段。
示例:创建 page.html 页面并使用布局模板:

html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="~{layout}">
<head>
    <title>具体页面标题</title>
</head>
<body>
    <!-- 替换布局模板中的 content 片段 -->
    <section layout:fragment="content">
        <p>这是具体页面的内容。</p>
    </section>
</body>
</html>

3. 表达式复用

可以把常用的表达式提取到一个变量中,在需要的地方复用。
示例:

html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>表达式复用示例</title>
</head>
<body>
    <!-- 定义一个表达式变量 -->
    <th:block th:with="user = ${session.user}">
        <p th:if="${user != null}" th:text="${'欢迎,' + user.name}">未登录</p>
        <p th:if="${user == null}">请登录</p>
    </th:block>
</body>
</html>

在这个示例中,th:with 指令定义了一个名为 user 的变量,用于存储 session.user 的值,后续在页面中能多次使用该变量,避免重复编写相同的表达式。

4. 消息复用

利用消息表达式(#{})和国际化资源文件,能够复用文本消息。
示例:

  1. 在 messages.properties 文件中定义消息:
properties
welcome.message=欢迎访问我们的网站!
  1. 在 HTML 页面中使用消息:
html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>消息复用示例</title>
</head>
<body>
    <p th:text="#{welcome.message}">默认欢迎消息</p>
</body>
</html>

相关文章:

  • Google A2A协议解析:构建分布式异构多Agent系统
  • 深入了解 UI 咨询公司:数字化时代的品牌助推器
  • 游戏引擎学习第222天
  • 【文献分享】因果推断经验研究中的中介效应与调节效应
  • [题解] Educational Codeforces Round 168 (Rated for Div. 2) E - level up
  • pycharm已有python3.7,如何新增Run Configurations中的Python interpreter为python 3.9
  • 【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析
  • 深度学习(第一集)
  • 5.1、深度剖析 docker run 命令:原理阐释与数据持久化实践探究
  • vp 2023 icpc 合肥 解题补题记录 [F E J G]
  • 什么是 React Router?如何使用?
  • 7.渐入佳境 -- 优雅的断开套接字连接
  • [Spark]深入解密Spark SQL源码:Catalyst框架如何优雅地解析你的SQL
  • 具身导航中的视觉语言注意力蒸馏!Vi-LAD:实现动态环境中的社会意识机器人导航
  • vue3 ts 自定义指令 app.directive
  • 5G网络下客户端数据业务掉线频繁
  • git工具
  • Mysql为什么有时候会选错索引
  • IE之路专题10.OSFP专题
  • python操作mongodb
  • 跨越时空的“精神返乡”,叶灵凤藏书票捐赠上海文学馆
  • 告别户口本!今天起婚姻登记实现全国通办
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措
  • 美联储主席:关税“远超预期”,美联储实现目标的进程或被推迟至明年
  • 联想发布超级智能体矩阵,杨元庆:美国关税影响反映在产品定价上,未来不确定性很大
  • 4月外汇储备增加410亿美元,黄金储备连续6个月增加