IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Thymeleaf 模板的创建与使用 -> 正文阅读

[JavaScript知识库]Thymeleaf 模板的创建与使用

参考资料:

  1. Thymeleaf参考手册:终极篇,史上最全的Thymeleaf参考文档

一. 前期准备

?后台
application.yml配置文件

# 自定义配置信息
search:
  # 最多检索出300条数据
  max-count: 300
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

// 标记为该类为配置文件类,并取了一个别名
@Configuration("configInfo")
public class ConfigInfo {

    // 一定要设置为public,不能是private,否则thymeleaf无法访问
    @Value("${search.max-count}")
    public String searchCount;
}

?前台
commonModule.js
模块js文件,所有函数通过模块的方法导出

const personUtils = {
    getName() {
        console.log('名字为贾飞天');
    },
    getAge() {
        console.log('年龄为20岁');
    }
};

const sendMail = () => {
  console.log('发送邮件');
};

export {
    personUtils,
    sendMail
};

test1.js
测试页面的js文件,该文件中用到了模块js放到window上的模块函数和后台的配置信息

$(function() {

    // 调用模板html绑定在window对象上的方法
    window.personUtils.getName();

    setTimeout(() => {
        // searchCount来源于共通模板中的js中
        console.log(searchCount);
    }, 200);
});

二. 模板文件

1.如果项目中每个页面都需要单独引入通过的js和css的话,不好维护
因此通过在模板文件中创建共通head,批量引入.
2.每个页面引入模板中的head之后,原有页面上的head将会失效,会被模板中的head覆盖掉.但是部分页面除了引入共通head的需求之外,还需要不会被模板覆盖掉的自定义head.
3.正是因为2.的需求,所以才添加了head(id,links,scripts,styles,title),配合?: _可以确保links,scripts有值的时候,将各页面单独引入的内容和模板head中的内容共同引,没值的时候不进行任何操作.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="ja">
<!-- 共通的head -->
<head th:fragment="head(id,links,scripts,styles,title)">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <!--插件js-->
    <script type="text/javascript" th:src="@{/js/public/jquery-3.6.0.min.js}"></script>
    <!--共通js-->
    <script type="text/javascript" th:src="@{/js/common/common.js}"></script>
    <!-- 共通模块js -->
    <script type="module" th:inline="javascript">
        // 从自定义模块js中的函数统一放入window对象中
        import {
            personUtils,
            sendMail
        } from /*[[@{/js/common/commonModule.js}]]*/ '';
        window.personUtils = personUtils;
        window.sendMail = sendMail;
    </script>
    <!-- 后台共通数据 -->
    <script  th:inline="javascript" type="text/javascript">
        // 后台配置文件中的信息
        const searchCount = [[${@configInfo.searchCount}]];
    </script>
    <!--
        引用模板的页面,自定义引入的js
        「 ?: _ 」 表示当scripts不存在的时候,不执行替换操作
     -->
    <th:block th:replace="${scripts} ?: _" />
    <!-- 各页面js,通过id变量实现了各画面引入自己的js文件 -->
    <script type="text/javascript" th:src="@{'/js/business/' + ${id} + '.js'}"></script>

    <link rel="stylesheet" type="text/css" th:href="@{/css/common/common.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/css/public/jquery-ui.min.css}" />
    <!-- 引用模板的页面,自定义引入的css -->
    <th:block th:replace="${styles} ?: _" />
    <!-- 各页面css,通过id变量实现了各画面引入自己的css文件 -->
    <link rel="stylesheet" type="text/css" th:href="@{'/css/business/' + ${id} + '.css'}" />
    <!-- 引用模板的页面,在header上写的css -->
    <th:block th:replace="${links} ?: _" />

    <link rel="icon" th:href="@{/img/logo.ico}" />
    <title th:replace="${title} ?: _">模板中的标题</title>
</head>
<body>

    <div th:fragment="Admin_Content">
        <!-- 当该片段被使用的使用,使用片段的页面会对[[*{name}]]进行解析 -->
        您好,尊贵的管理员,你的名叫[[*{name}]]
    </div>

    <footer th:fragment="footer_fragment">
        Copyright ?测试系统页脚
    </footer>
</body>
</html>

三. 页面

?页面一

1. links = ~{::link} 中的 links 为模板head中的变量名, ~{::link} 表示引用当前页面head中的link标签,如果当前页面的head中不存在link标签的话,还可以**links = ~{}**来表示.
2.可以根据当前登录用户的权限来决定模板中的片段是否要被引入

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head th:replace="layout/layout :: head(
    id = 'test1'
    ,links = ~{::link}
    ,scripts = ~{::script}
    ,styles = ~{::style}
    ,title = ~{::title}
)">
    <!-- 该页面中完全使用模板中的header,没有自定义的内容-->
</head>
<body>
    <div id="container" th:object="${entity}">

        <!--
            当isAdmin为true的时候,会使用模板中的片段来代替
            当isAdmin为false的时候
                : _ 表示什么都不做,因此div内原本的内容会被保留
                : ~{} 表示替换为空片段,因此整个div会被清空
         -->
        <div th:replace="*{isAdmin} ? ~{layout/layout :: Admin_Content} : _">
            你好,普通用户,你的名字叫[[*{name}]]
        </div>
        <hr>

        <th:block th:replace="*{isAdmin} ? ~{layout/layout :: Admin_Content} : ~{}">
            <div>你好,普通用户,你的名字叫[[*{name}]]</div>
        </th:block>
        <hr>
    </div>

    <!-- 引入模板的中的页脚 -->
    <div th:replace="layout/layout :: footer_fragment"></div>
</body>
</html>

😋打开页面1的时候,head部分的效果
在这里插入图片描述
在这里插入图片描述
😋当使用管理员登录的时候,使用了管理员片段
在这里插入图片描述
🥰JS中的函数执行结果
在这里插入图片描述


?页面二

1. 在页面的head中添加了自定义title ,因此没有使用模板中的共通title.
2. 在页面的head中添加了style标签,最终添加的style标签反映到了html的head部.
3. 页面中没有额外的css和js文件引入,因此可以用null或者~{}来占位参数.

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head th:replace="layout/layout :: head(
    id = 'test2'
    ,links = null
    ,scripts = ~{}
    ,styles = ~{::style}
    ,title = ~{::title}
)">
    <!-- 在header中添加本页面的style样式 -->
    <style>
        div {
            color: red;
        }
    </style>
    <!-- 不使用模板中的标题,使用自定义的标题 -->
    <title>test2页面的标题</title>
</head>
<body>
    <div>
        我是test2页面中内容
    </div>
</body>
</html>

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:27:51  更:2022-07-05 23:29:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:45:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码