Thymeleaf 内联表达式、文本、JavaScript、CSS

【项目实战】在Thymeleaf中使用内置CSS主要涉及两种方式:直接引用静态CSS文件和在CSS `<style>` 标签内进行内联处理。 在Thymeleaf中使用内置CSS主要涉及两种方式:直接引用静态CSS文件和在CSS<style>标签内进行内联处理。通过以下方法,可以在Thymeleaf模板中灵活地使用内置CSS,实现动态样式表的生成和应用。 阅读详情

内联表达式

虽然通过 Thymeleaf 标准⽅⾔中的标签属性已经⼏乎满⾜了开发中的所有需求,但是有些情况下更喜欢将表达式直接写⼊到 HTML ⽂本中:

例如有时候这样更合适:< p>Hello, [[${session.user.name}]]</p>
⽽不喜欢这样写代码:<p>Hello, <span th:text="${session.user.name}">Sebastian</span>!</p>

[[…]] 或 [(…)] 中的表达式就是 Thymeleaf 中内联表达式,任何在 th:text 或 th:utext 属性中使⽤的表达式都可以出现在 [[]] 或 [()] 中使用, [[…]] 等价于 th:text(结果将被 HTML 转义),[(…)] 等价于 th:utext(结果不会执⾏HTML转义)。

<body>
<!--后台传出:model.addAttribute("info", "Love you <b>中国</b>");-->
<!--/*前者会转义,后者不会转义*/-->
<p>[[${info}]]</p>
<p>[(${info})]</p>
 
<!--/*可以是任意的数据类型,如普通的文本,与 th:text、th:utext完全等价*/-->
<p>[[Love]]</p>
<p>[['I Love You Baby']]</p>
<p>[(9527)]</p>
</body>

在这里插入图片描述

提示:当静态打开 HTML ⽂件时,内嵌的表达式将逐字显示在 HTML ⽂件中,
因此⽆法将其⽤作设计原型了!
比如 “<p>[[${info}]]</p>” 如果是以静态原型打开,
那么显示的就是 <p>[[${info}]]</p>。

th:inline=“none” 禁用内联

内联机制可以被禁⽤,因为在实际应⽤中可能会想输出 [[…]] 或 [(…)] 序列⽽不将其内容作为表达式处理的情况。 为此将使⽤
th:inline =“none” 来禁⽤内联。

<body>
<!--/*禁用内联表达式*/-->
<p th:inline="none">[[${info}]]</p>
<p th:inline="none">[(${info})]</p>
 
<!--/*禁用内联表达式*/-->
<p th:inline="none">[[Love]]</p>
<p th:inline="none">[['I Love You Baby']]</p>
<p th:inline="none">[(9527)]</p>
<p th:inline="none">[[1,2,3,4,5]]</p>
</body>

内联 JavaScript

JavaScript 内联允许在 HTML 模板模式中更好地集成 JavaScript < script>块。与⽂本内联⼀样,这实际上等同于处理脚本内容,就像它们是JavaScript 模板模式中的模板⼀样,因此⽂本模板模式的所有功能都可以在内联脚本中使⽤。

必须使⽤ th:inline =“javascript” 显式的启⽤此 JavaScript 模板模式:

<head lang="en">
    <meta charset="UTF-8">
    <title>用户首页</title>
    <link type="text/css" rel="stylesheet" th:href="@{/css/userHome.css}">
 
    <script type="text/javascript" th:inline="javascript">
        /**
         * 后台输出:
         * model.addAttribute("info", "Love you <b>中国</b>");
         * model.addAttribute("age", 35);//注意:使用 [(${info})] 时编译报错,浏览器运行也会报错
         * model.addAttribute("id", null);
         * model.addAttribute("name", "");
         * @type {*[]}
         */
        var info = [[${info}]];
        var age = [[${age}]];
        var id = [[${id}]];
        var name = [[${name}]];
        console.log(id, name, age, info);
    </script>
</head>

特别提示:th:inline =“javascript” 显式启⽤ JavaScript 模板模式只能是在 Html 文件内部的 JavaScript 代码,如上所示。不能在引入的外部 JavaScript 文件中进行操作,如:

//如果在这个外置的 userHome.js 中进行内联表达式操作,则 Thymeleaf 无法解析,浏览器识别不了而报错。
<script type="text/javascript" th:inline="javascript" th:src="@{/js/userHome.js}"></script>

JavaScript ⾃然模版

Thymeleaf 的目标就是希望前后端分离,即同一个 Html 文件前端人员以静态原型的方式打开时,看到的是它们的内容,而后端人员通过服务器打开时,看到的是动态的数据。内联的 JavaScript 同样可以实现这一点。在 JavaScript 注释中包含(转义)内联表达式即可满足此需求。

<script type="text/javascript" th:inline="javascript">
    /**
     * 后台输出:model.addAttribute("info", "Love you <b>中国</b>");
     * Thymeleaf 将自动忽略掉注释之后 和 分号之前的所有内容,如下为 "前端测试"
     */
    var info = /*[[${stationName}]]*/ "前端测试";
    console.log(info);
</script>

paramMap.put("stationName", "动态数据");

通过服务器打开是这样的:
在这里插入图片描述
以原型静态文件打开是这样的:
在这里插入图片描述
这种在前后端都可以运行的 JavaScript 脚本称为 JavaScript ⾃然模板!

⾼级内联表达式JS序列化

关于 JavaScript 内联的⼀个重要的特性是,内联表达式的计算结果不限于字符串,它能⾃动的将以下对象序列化为 javascript 对象。 Thymeleaf ⽀持以下⼏种序列化对象:

1)Strings
2)Numbers
3)Booleans
4)Arrays
5)Collections
6)Maps
7)Beans (有getter _and _setter⽅法)

Thymeleaf 对 JavaScript 序列化的⽅式是通过 org.thymeleaf.standard.serializer.IStandardJavaScriptSerializer 接⼝的实
现,可以在模板引擎的 StandardDialect 的实例中进⾏配置。

该 JavaScript 序列化机制默认将在类路径中查找 Jackson 库,如果存在,将使⽤它。 如果没有,它将应⽤⼀个内置的序列化机制,内置的序列化机制涵盖⼤多数场景的需求,并和 Jackson 序列化机制产⽣类似的结果。

这里以后台控制器传出一个 List 对象为例进行说明,其它都是同理,User 是 Java Beab,提供了 getter、setter 方法。

    <script type="text/javascript" th:inline="javascript">
        /**
         * 后台输出:model.addAttribute("userList", userList);
         * userList 是一个 List<User> 的结构,其中有5个元素
         */
        var userList = [[${userList}]];
        /**已经被 Thymeleaf 序列化为 JS 对象,是一个数组加Object 的个数,即数组中有5个Object*/
        console.log("userList", userList);
        for (let i = 0; i < userList.length; i++) {
            /**取值打印*/
            console.log(i, userList[i], userList[i].uName);
        }
    </script>

在这里插入图片描述

内联 CSS

Thymeleaf 还允许在 CSS

<style th:inline="css">
   ...
</style>

<head lang="en">
    <meta charset="UTF-8">
    <title>用户首页</title>
    <link type="text/css" rel="stylesheet" th:href="@{/css/userHome.css}">
    <!--/*为了测试简单,直接使用 th:with 定义两个局部变量;也可以后台传输来的*/-->
    <style type="text/css" th:inline="css" th:with="h4Color='yellow',fontSize='25px'">
        p {
            color: [[${h4Color}]];
            font-size: [(${fontSize}) ];
        }
    </style>
</head>

注意事项:
1)获取变量赋值时,fontSizt 需要使用 [(…)] 不进行转义,如果是 [[…]] 转义则会多出来一个斜杠而导致无效。
2)与内联 JavaScript ⼀样,CSS 内联也允许 < style> 标签可以静态和动态地⼯作,即通过在注释中包含内联表达式作为CSS ⾃然模板。

 <style type="text/css" th:inline="css" th:with="h4Color='yellow',fontSize='25px'">
    p {
        color: /*[[${h4Color}]]*/ red;
        font-size: [(${fontSize})];
    }
</style>

3)如上所示当服务器动态打开时,字体颜色为黄色;当以原型静态打开时,显示的是红色,因为 Thymeleaf 会自动忽略掉 css 注释之后 和 分号之前的代码。
4)因为 CSS 自然模板的问题,所以不能在 css 中像以前一样添加注释,因为 Thymeleaf 会将它们当做模板进行处理。
5)与 内联 JavaScript 一样,内联 CSS 同样只能 Html 内嵌的 <style 标签中进行使用,不能在外部 关联的 CSS 文件中进行使用。

//这是错误的,不能在 userHome.css 文件中使用内联 CSS。
 <link type="text/css" rel="stylesheet" th:href="@{/css/userHome.css}" th:inline="css">
Thymeleaf 语法全面详解:从入门到精通(史上最全) Thymeleaf 是一个功能强大的服务器端 Java 模板引擎,支持多种文件类型,如 HTML、XML、JavaScript 和 CSS。其语法丰富,涵盖了变量表达式、选择表达式、消息表达式、链接表达式和片段表达式等多种表达式类型。Thymeleaf 还支持字面量、文本操作、算术运算、布尔运算和条件运算等基本操作。核心属性如 th:text、th:utext、th:value 和 th:with 用于设置文本内容、表单值和局部变量。条件属性如 th:if、th:unless 和 th:switch 用于条 阅读详情

相关推荐

macOS Monterey官方镜像高速下载指南(附迅雷链接+兼容性清单)

本文提供macOS Monterey官方镜像的高速下载指南,重点介绍利用迅雷等工具加速下载官方安装包的有效方法。同时,详细列出了系统兼容性清单,帮助用户在下载前确认设备支持,并分享了从下载、验证到安全安装的完整流程与常见问题解决方案。

j7k8l的博客 2194

Thymeleaf中使用script传参

项目背景:SpringBoot+Thymeleaf在web界面中想要实现一个如图的删除功能,在用script标签向HTML页面中嵌入一个删除的的脚本时,换了多种方法(下图为例)都无法传参,报错500 通过如下代码实现1.需要在标签上显示开启: 2.双中括号 [[ ]] 输出所需文本,结果会使用引号将其括起来并且对其文本内容中进行JS转义 未解决问题:IDEA中双中括号[[]]显示红色波浪线,但程序可以正常

weixin_50425831的博客 1868

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 674

thymeleaf引入css,js失效

使用SpringBoot开发时,在页面中使用thymeleaf引入css和js资源没有效果,解决办法如下: 查看thymeleaf的命名空间有没有写错 <html lang="en" xmlns:th="http://www.thymeleaf.org"> 2.检测导入css和js资源的语法有没有错,如 <!--css--> <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}" type="text/css"

superxmh的博客 2789

从材料到磁场:ANSYS Workbench永磁体仿真全流程解析

本文详细解析了在ANSYS Workbench中进行永磁体仿真的完整流程。从钕铁硼等永磁材料的特性讲起,逐步指导如何在软件中搭建模型、定义关键磁化方向、设置边界条件与网格划分,并解读磁场分布结果。文章旨在帮助工程师掌握静磁场仿真核心技术,为电机、传感器等设备的设计与优化提供精准指导。

weixin_29229989的博客 273

基于灰度信息的图像配准方法

图像配准方法分为三种:基于灰度信息方法、基于变换域方法和基于特征方法。基于灰度信息方法是直接根据图像或图像块灰度信息进行像素上的对齐,该方法主要思想是直接最小化图像信息差异。然而,图像信息差异的判断准则衍生出不同的配准方法。常见的基于灰度信息的图像配准方法包括互相关法、互信息法和误差平方和法。本节将分别对互相关法、互信息法和误差平方和算法展开介绍,并通过MATLAB进行演示。基于灰度的图像方法容易实现,但同样存在不足。该方法对成像条件(光照,遮挡)、图像形变旋转以及噪声极其敏感,同时具有较高的计算复杂度。

weixin_42068054的博客 3777

thymeleaf页面配置css、js的静态资源路径问题

thymeleaf页面配置css、js的静态资源路径问题

weixin_48613005的博客 2832

RockChip Android14 修改LCD背光最大值

在调试LCD屏时时长会出现硬件不匹配,导致电流过大,屏幕发热严重。在不调整硬件的情况下,我们可以通过修改软件,降低LCD背光最大值来实现适配。我们都知道LCD屏背光是靠pwm来控制,一般来说最大值可以设置为255,针对上述问题,我们可以通过软件来降低该值,比如200,100等等。

qq_34968572的博客 631

前端基础(HTML+CSS+thymeleaf技术应用)

前端HTML、CSS 、thymeleaf

MRJJ_9的博客 663

人形机器人 vs 机器狗SLAM:FAST_LIO_LOCALIZATION_HUMANOID的差异化优化方向

《FAST_LIO_LOCALIZATION_HUMANOID在人形与机器狗应用中的差异化优化策略》摘要: 格灵深瞳开源的FAST_LIO_LOCALIZATION_HUMANOID系统针对人形机器人和机器狗提出了差异化优化方案。人形机器人需应对双足步态带来的周期性晃动,通过动态盲区滤波、二阶运动模型补偿步态相位畸变,并修复重力向量计算误差。机器狗则需解决四足高频运动挑战,包括设计自适应地面分割算法、抑制IMU高频振动噪声,以及基于足端接触序列的非匀速运动建模。二者在传感器配置(高度/视角)、运动频率(1-

Studying…… 326

LangChain .NET:C#开发者构建AI应用的RAG框架与实战指南

大语言模型(LLM)作为当前人工智能的核心技术,通过深度学习海量文本数据,掌握了强大的语言理解和生成能力。其原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系,从而实现对复杂语义的建模。这一技术价值在于能够将非结构化的自然语言转化为可计算、可推理的表示,为各类智能应用提供认知基础。在实际工程实践中,LLM常被应用于构建检索增强生成(RAG)系统和AI智能体(Agent)。RAG通过结合外部知识库检索与LLM生成,有效提升了问答的准确性和事实性,是构建企业知识库、智能客服等场景的关键技术。

weixin_42538175的博客 705

7)Thymeleaf 内联表达式、文本、JavaScript、CSS

目录 内联表达式 th:inline="none" 禁用内联 内联 JavaScript JavaScript ⾃然模版 ⾼级内联表达式JS序列化 内联 CSS 内联表达式      虽然通过 Thymeleaf 标准⽅⾔中的标签属性已经⼏乎满⾜了开发中的所有需求,但是有些情况下更喜欢将表达式直接写⼊到 HTML ⽂本中: 例如有时候这样更合适:&lt;p&gt;Hello, ...

蚩尤后裔-汪茂雄 1万+

【AI大模型】核心基石:Transformer架构入门通俗完整解读

文章摘要: Transformer架构是AI大模型(如GPT、Llama等)的核心基石,彻底颠覆了传统RNN/LSTM的逐字计算模式,通过自注意力机制实现全局并行运算和长文本语义理解。本文用通俗语言拆解Transformer的核心模块:位置编码保留语序、多头注意力捕捉上下文关联、掩码机制确保生成逻辑、残差连接稳定训练,并搭配极简PyTorch代码演示Decoder架构的逐字生成过程。Transformer的并行性、可堆叠性和全局注意力优势,使其成为千亿参数大模型的基础。理解Transformer是掌握大模型

unber的博客 44

可能是最全的Thymeleaf参考手册(十二):内联

表达式内联 尽管标准方言允许我们使用标记属性来执行几乎所有操作,但是在某些情况下,我们更喜欢直接将表达式写到HTML文本中。例如,我们可能更喜欢这样编写: <p>Hello, [[${session.user.name}]]!</p> 以代替: <p>Hello, <span th:text="${session.user.name}">Sebastian</span>!</p> 在Thymeleaf中,[[....

银河架构师的博客 819

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Thymeleaf系列【8】内联

2 内联 12.1 表达式内联 尽管标准方言允许我们使用标签属性做几乎所有事情,但在某些情况下,我们更喜欢将表达式直接写入我们的 HTML 文本中。例如,我们可能更喜欢这样写: Hello, [[${session.user.name}]]! ...而不是这个: Hello, Sebastian! 在 Thymeleaf 中,[[...]]或之间的表达式[(...)]被视为内联表达式,在它们内部,我们可以使用任何类型的表达式,这些表达式在 ath:text或th:utext属性中也有效。 请注意, whil

记录知识、锤炼自我 1573

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

thymeleaf 内联表达式

thymeleaf内联表达式

weixin_43931625的博客 763

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

thymeleaf 需要注意的点

1、[[...]] 在 Thymeleaf 中认为是内联表达式 2、th:inline="text/javascript/css/none" 3、注释 /*&lt;![CDATA[*/ ... /*]]&gt;*/ 1、[[...]] 在 Thymeleaf 中认为是内联表达式 &lt;p&gt;[[${session.user.name}]]!&lt;/p&gt; 等同于: &lt;...

javaman_baicun 的博客 1340

thymeleaf 使用inline获取js中的值_Thymeleaf参考手册(十二):内联

表达式内联尽管标准方言允许我们使用标记属性来执行几乎所有操作,但是在某些情况下,我们更喜欢直接将表达式写到HTML文本中。例如,我们可能更喜欢这样编写:<p>Hello, [[${session.user.name}]]!</p>以代替:<p>Hello, <span th:text="${session.user.name}">Sebastian&...

weixin_39691748的博客 1070

thymeleaf 总结

#、* 和$的区别 1.$符号取上下文中的变量:<input type="text" name="userName" th:value="${user.name}"> 2.#符号取thymeleaf工具中的方法、文字消息表达式:<p th:utext="#{home.welcome}">Welcome to our grocery store!</p> 3...

lduzhenlin的专栏 689

Thymeleaf 内联语法使用教程

高级内联和 JavaScript 序列化:关于 JavaScript 内联,需要注意的重要一点是,这种表达式评估是智能的,并且不仅限于字符串。Thymeleaf 将正确地用 JavaScript 语法编写以下类型的对象:字符串,数字,布尔值,数组,List,Map,Beans(具有getter和setter方法的对象))]被视为内联表达式,在它们内部,我们可以使用任何类型的表达式,这些表达式在 ath:text或th:utext属性中也有效。对应于th:text(结果进行HTML转义,直接输出原内容),

yqj234的专栏 1695

thymeleaf部分语法整理

th:switc和th:case与java中switch等效,只要其中⼀个 th:case 的值为 true就显示标签,则同⼀个 switch 语句中的其他 th:case 属性都将被视为 false即都不显示标签。)] 中的表达式就是 Thymeleaf 中内联表达式,任何在 th:text 或 th:utext 属性中使⽤的表达式都可以出现在 [[]] 或 [()] 中使用。th:each=“遍历出来的数据,遍历出来的数据的状态 : 要遍历的数据”用目标的代码替换当前标签, 不会保留页面自身的标签。

2302_80277784的博客 1955

thymeleaf的基础知识二(源文档学习)

七 表达式内联 7.1 不使用方言而是直接在html中写表达式 [[ ]] 或 [( )] 后者是不转义的 <p>The message is "[(${msg})]"</p> <p>The message is "[[${msg}]]"</p> 7.2 内联和模板的优劣 不使用内联时,浏览器像这样静态地展示我们的代码片段: Hel...

qq_39615829的博客 247

thymeleaf 如何判断为空_Thymeleaf参考手册(十三):文字模板模式

文字语法在Thymeleaf的三种模板模式被认为是文字:TEXT,JAVASCRIPT和CSS。这将它们与标记模板模式区分开:HTML和 XML。文本模板模式和标记模式之间的主要区别在于,在文本模板中,没有标签可以插入属性形式的逻辑,因此我们必须依靠其他机制。这些机制的第一个也是最基本的是内联的,我们已经在上一章中进行了详细介绍。内联语法是在文本模板模式下输出表达式结果的最简单方法,因此,这是文本...

weixin_42360953的博客 1101

thymeleaf if判断_史上最详 Thymeleaf 使用教程

点击上方“桌前明月”,可以关注我偶。前言操作前建议先参考我的另一篇博客:玩转 SpringBoot 2 快速整合 | Thymeleaf 篇查看如何在SpringBoot 中使用 Thymeleaf。还有一点需要注意的是:模版页面中的 html 上需要声明 Thymeleaf 的命名空间,具体代码如下:<html xmlns:th="http://www.thymeleaf.or...

weixin_39709979的博客 2万+

thymeleaf 选择excel_细品 Spring Boot+Thymeleaf,还有这么多好玩的细节!

原标题:细品 Spring Boot+Thymeleaf,还有这么多好玩的细节!来自公众号: 江南一点雨虽然现在流行前后端分离,但是后端模版在一些关键地方还是非常有用的,例如邮件模版、代码模版等。当然也不排除一些古老的项目后端依然使用动态模版。Thymeleaf 简洁漂亮、容易理解,并且完美支持 HTML5,可以直接打开静态页面,同时不新增标签,只需增强属性,这样也降低了学习成本。因此松哥今天花点...

weixin_36364022的博客 241

Thymeleaf之内联

Thymeleaf 标准方言能够使用标签属性(th)的方式来实现很多事情,比如置换 HTML 文本(th:text)等,有的我们可能更喜欢直接将表达式写到 HTML 标签中,这种写法我们称为是内联。

小异常的博客 2042
上一篇: Thymelead th:with 局部变量 与 属性优先级
下一篇: Thymeleaf 基本对象表达式
yyangqqian
博客等级 码龄15年 406粉丝 406原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值