首页 > 其他分享 >Thymeleaf入门(一)

Thymeleaf入门(一)

时间:2023-01-16 11:14:41浏览次数:59  
标签:... 片段 入门 注释 Thymeleaf th 内联 copy

目录

Thymeleaf简介

Thymeleaf是一个java的模板引擎,能够处理Html、Xml、Javascript、Css甚至纯文本,类似于Jsp和Freemarker

  • 自然模板,原型即页面
  • 语法优雅简单,OGNL、SpringEL
  • 遵从web标准,支持Html5

Thymeleaf的语法规则甚多,不一一记录,在使用过程再做说明


 较好文章示例:https://www.cnblogs.com/itdragon/archive/2018/04/13/8724291.html

        https://www.cnblogs.com/tuanz/p/8709709.html


模板布局

  通常网站中会有公用部分,比如头部、尾部和菜单等,可以提取出来作为模板片段供其他页面进行引用

定义和引用片段

定义-->th:fragment="copy"定义一个copy的片段的版权信息

复制代码
<!DOCTYPE html>
<!--解决th报错 -->
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>thymeleaf</title>
</head>
<body>
    <div th:fragment="copy">
        &copy; 2019<a href="www.baidu.com">百度</a>
    </div>
</body>
</html>
复制代码

引用-->th:insert="~{footer :: copy},指在footer处引入copy片段

<body>
    ...
    <div th:insert="~{footer :: copy}"></div>
</body>

也可以不使用th:fragment,也可以引入片段,使用id

复制代码
<body>
    ...
    <div id="copy-section">
        &copy; 2019<a href="https://www.baidu.com">百度</a>
    </div>
</body>
复制代码

引用-->th:insert="~{footer::#copy-section}"

th:insert、th:replace、th:include三者区别

  • th:insert 将简单地插入指定的片段作为正文的主标签
  • th:replace用指定的实际片段来替换其主标签
  • th:include类似于th:insert,但不是插入片段,它只插入此片段的内容(3.x版本后,不再推荐使用)
<footer th:fragment="copy">
        &copy; 2019<a href="www.baidu.com">百度</a>
</footer>

 对上述同一片段进行引用,观察三者的区别

复制代码
<body>
    ...
    <div th:insert="footer::copy"></div>
    <div th:replace="footer::copy"></div>
    <div th:inlcude="footer::copy"></div>
</body>
复制代码

最终效果:

复制代码
<body>
    ...
    //将整个片段插入到div中
    <div>
        ...
        <footer>
            &copy;2019<a href="www.baidu.com">百度</a>
        </footer>
    </div>

    //将片段直接整体替换
    <footer>
        &copy;2019<a href="www.baidu.com">百度</a>
    </footer>

    //只引用片段的内容
    <div>
        &copy;2019<a href="www.baidu.com">百度</a>
    </div>
</body>
复制代码

属性优先级

当在同一个标签中写入多个th:*属性时,会发生什么?

    <ul>
        <li th:each="item:${items}" th:text="${item.descriptiom}">Item</li>
    </ul>

后面的文本取值th:text依赖于th:each,理想预期前者应先于后者(由下图优先级表可看出th:each的优先级高于th:text)

属性优先级顺序表:

注释

除了<!-- -->注释,thymeleaf还有:

  • 解析器级注释块:删除<!--/* 和*/-->之间的所有内容

  单行:<!--/* ... */-->

  多行:<!--/* -->  ... ...<!-- */-->

  • 原型注释块:当模板静态打开时(比如原型设计),原型注释块所注释的代码<!--/*/ 和 /*/-->将被注释,而在模板执行时,这些注释的代码,就能被显示出来(注释th:block比较有效)
复制代码
<span>hello!</span>
<!--/*/
    <div th:text="${...}">
        ...
    </div>
/*/-->
<span>goodbye!</span>
复制代码

内联

内联表达式

  • [[...]]或[(...)]分别对应于th:text和th:utext

[(...)]:不会对msg中的特殊字符进行转义

<p >The message is "[(${msg})]" </p>


//执行效果
<p>The message is  “This is <b>great</b>” </p>

[[...]]:对特殊字符进行转义

<p>The message is "[[${msg}]]" </p>


//执行效果,不会对msg中的特殊字符进行转义
<p>The message is  “This is &lt;b&gt; great &lt;/b&gt;” </p>

禁用内联

  • 有时候需要禁用这种机制,比如:输出[[...]]或[(...)]文本内容,使用th:inline="none"
<p th:inline="none">this is msg</p>

JavaScript内联

复制代码
<script th:inline="javascript">
    ...
    var username = /*[[${session.user.name}]]*/ 'echola';
    ...

</script>
复制代码
在解释器解析代码时,会解析里面的[[${session.user.name}]]加载静态页时会解析后面的语句var name='echola'
注意:js内联代码需要加入/*<![CDATA[*/ ... /*]]>*/代码块,thymeleaf才能正确解析运算符和操作符号&、&&等

JS内联还有两个特性
  • 附加代码:/*[+ ... +]*/
  • 移除代码:/*[- */... /*-]*/

标签:...,片段,入门,注释,Thymeleaf,th,内联,copy
From: https://www.cnblogs.com/kn-zheng/p/17054928.html

相关文章

  • Thymeleaf入门(二):基本对象
    目录表达式基本对象 基本对象#ctx:上下文对象。是org.thymeleaf.context.IContext或者org.thymeleaf.context.IWebContext的实现#locale:直接访问与java.util.Local......
  • SpringBoot集成Thymeleaf
    1、引入依赖在maven项目的pom.xml中引入spingboot-boot-starter-thymeleaf依赖,同时为了解决Html严格校验报错的问题,增加nekohtml依赖<!--thymeleaf模板引擎-->......
  • Web安全入门与靶场实战(7)- 利用nmap进行端口扫描
    在获取的靶机IP之后,接下来我们继续扫描这台靶机开放了哪些端口。端口扫描通常是shentou测试要做的第一步操作。为什么要扫描端口呢?因为端口对应了服务,所以扫描端口的目的就......
  • Vue 快速入门(一)
     1、介绍Vue(读音/vju/,类似view),是中国的大神尤雨溪开发的,为数不多的国人开发的世界顶级开源软件。是一套用于构建用户界面的渐进式框架,Vue被设计为可以自底向上逐层应......
  • 一实例从WebSocket入门至精通
    主要是客户端的进化(环境jdk1.7以上tomcat7.34以上) 1、服务器端packagecom;importjava.io.IOException;importjava.util.concurrent.CopyOnWriteArraySet;imp......
  • 基于阿里云的 Terraform 入门实战
    介绍Terraform是一种部署技术,任何想要通过​​基础设施即代码(InfrastructureasCode,IaC)​​​的方式来管理基础设施的人,都可以使用这种技术。在这里​​基础设施​​​......
  • 230115_50_SpringBoot入门
    如果类中属性比较多,通过@value赋值比较麻烦。可以通过yaml配置文件给实例赋值。新建Person类,通过@ConfigurationProperties注解可以实现配置文件注入,其中prefix可以指......
  • leetcode算法入门Day6---滑动窗口
    3.无重复字符的最长子串给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。测试用例:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串......
  • three.js教程1-快速入门
    1、项目开发环境引入threeJs如果采用的是Vue+threejs或React+threejs技术栈,threejs就是一个js库,直接通过npm命令行安装就行。npm安装特定版本three.js(注意使用哪个......
  • Spring Boot---(16)Spring Boot使用Thymeleaf开发web页面
    摘要:Spring官方不推荐使用JSP来开发WEB,而是推荐使用如下几种模板引擎来开发:Thymeleaf(Spring官方推荐)FreeMarkerVelocityGroovyMustache这里以Thymeleaf为例,介绍如何和Spri......