⒈理解Thymeleaf

  • Java模板引擎。能够处理HTML、XML、JavaScript、CSS甚至纯文本。类似JSP、Freemarker
  • 自然模板。原型即页面
  • 语法优雅易懂,OGNL、SpringEL
  • 遵从Web标准。支持HTML5

⒉如何识别Thymeleaf标准方言

  1.需要页面引入命名空间

 <html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<span th:text="...">
</body>
</html>

  2.无需页面引入命名空间 

 <span data-th-text="...">

⒊语法

  1.${...}:获取变量值,OGNL

    ①获取对象的属性,调用方法

    ②使用内置的基本对象

    ③内置的一些工具对象 

 <span th:text="${book.author.name}">

  2.*{...}:变量选择表达式,和${...}在功能上是一样的,区别在于,它是在当前选择的对象执行,而不是在整个上下文变量映射上。配合th:object使用简化代码

     <div th:object="${book}">
<span th:text="*{title}"></span>
</div>

  3.#{...}:获取国际化内容

 <span th:text="#{header.address.city}"></span>

  4.@{...}:定义URL

     <!--链接表达式可以是相对的,在这种情况下,应用程序上下文将不会作为URL的前缀-->
<a th:href="@{../documents/report}"></a>
<!--也可以是服务器相对(同样没有应用程序上下文前缀)-->
<a th:href="@{~/contents/main}"></a>
<!--和协议相对(就像绝对URL,但浏览器将使用在显示的页面中使用的相同的HTTP或HTTPS协议)-->
<a th:href="@{//static.coreqi.cn/res/initial}"></a>
<!--当然,链接表达式也可以是绝对的-->
<a th:href="@{http://www.coreqi.cn}"></a>

  5.~{...}:片段引用表达式

     <div th:fragment="copy">
&copy; 2019 <a href="http://www.coreqi.cn">Coreqi</a>
</div> <div th:insert="~{footer :: copy}"></div>

  6.字面量(文字)

    ①文本   

     <span th:text="'Hello World!'"></span>

    ②数字

     <span th:text="2019"></span>
<span th:text="2019 + 2"></span>

    ③布尔

     <div th:if="${user.isAdmin()} == false">
...
</div>

    ④Null

     <div th:if="${user.phoneNum} == null">
...
</div>

  7.算术操作

    ①+、-、*、/、% 

     <div th:text="${users.count} % 2 == 0">
....
</div>

  8.比较和等价

    ①比较:>、<、>=、<=(gt、lt、ge、le)

     <div th:if="${page.totalPages le 7}">

    ②等价:==、!=(eq、ne)

     <div th:if="${page.totalPages eq 7}">

  9.条件运算符

     <div th:class="${row.even}? 'even' : 'odd'"></div>

  10.无操作(什么都不做)

     <span th:text="${user.name}? : _">如果无操作则保留此处文本,不作覆盖</span>

  11.设置属性值

     ①设置任意属性值  th:attr

     <form th:attr="action=@{/coreqi}">
<input type="submit" th:attr="value=#{subscribe.submit}"/>
</form>

    ②设置指定属性值  

     <form th:action="@{/coreqi}">
<input type="submit" th:value="#{subscribe.submit}"/>
</form>

    ③固定布尔属性

     <form th:action="@{/coreqi}">
<input type="checkbox" name="option1" checked/> <!--HTML-->
<input type="checkbox" name="option2" checked="checked"/> <!--XHTML-->
<input type="checkbox" name="option3" th:checked="${user.active}"/>
</form>

  12.迭代器

    ①基本的迭代 th:each  

  <li th:each="book : ${books}" th:text="${book.title}"></li>

     状态变量:用于跟踪迭代器的状态。

     index【索引】、count【索引+1】、size【总数】、current【当前迭代的变量】、even/odd【是奇数还是偶数】、first【迭代器第一个】、last【迭代器最后一个】

    <tr th:each="prod,iterStat : ${prods}" th:class="${iterStat.odd}? 'odd'"></tr>

  13.条件语句

    ①th:if  判断条件是否成立,true成立,false不成立,非0成立,null不成立。   

     <div th:if="${not #lists.isEmpty(prod.comments)}">
...
</div>

    ②th:unless  不成立则执行

     <div th:unless="${#lists.isEmpty(prod.comments)}">
...
</div>

    ③switch  当有一个匹配后,剩下的全为false

     <div th:switch="${user.role}">
<p th:case="'admin'"></p>
<p th:case="#{roles.manager}"></p>
<p th:case="*"></p>
</div>

⒋Thymeleaf属性的优先级

⒌注释

  ①标准HTML/XML注释

     <!--<span th:text="'fanqi'"></span>-->

  ②Thymeleaf解析器级注释块---在解析的过程中删除掉<!--/*-->和<!--*/-->之间的所有内容

     <!--/*-->
<div>
Hello World!
</div>
<!--*/-->

  ③原型注释块

    在静态页面的时候是注释掉的,是不会显示的。当被Thymeleaf解析器解析的时候,这些注释的代码将会显示出来。

     <span>Hello!</span>
<!--/*/
<div th:text="${...}">
...
</div>
/*/-->
<span>Good Bye!</span>

⒍内联

  1.内联表达式

    ①[[...]]或[(...)]分别对应于th:text【会对一些特殊符号进行转义】和th:utext【不会对一些特殊符号进行转义】

  2.禁用内联表达式  th:inline="none" 

     <p th:inline="none">输出以下文本内容:[[1,2,3],[4,5]]!</p>

  3.JavaScript内联

     <script th:inline="javascript">
var username=/*[[${session.user.name}]]*/ "Gertrud Kiwifruit";
</script>

  4.css内联

     <style th:inline="css">
.[[${classname}]]{
text-align: [[${align}]];
}
</style>

⒎表达式基本对象

  1.基本对象

    ①#ctx:上下文对象。是org.thymeleaf.context.IContext或者org.thymeleaf.context.IWebContext的实现。 

 ${#ctx.locale}
${#ctx.variableNames}
${#ctx.request}
${#ctx.response}
${#ctx.session}
${#ctx.servletContext}

    ②#locale:直接访问与java.util.Locale关联的当前的请求。 

 ${#locale}

  2.request/session等属性对象

    ①param:用于检索请求参数

 ${param.foo}
${param.size()}
${param.isEmpty()}
${param.containsKet('foo')}
...

    ②session:用于检索session属性  

 ${session.foo}
${session.size()}
${session.isEmpty()}
${session.containsKey('foo')}
...

    ③application:用于检索application/servlet上下文属性

 ${application.foo}
${application.size()}
${application.isEmpty()}
${application.containsKey('foo')}
...

  3.Web上下文对象

    ①#request:直接访问与当前请求关联的javax.servlet.http.HttpServletRequest对象。

 ${#request.getAttribute('foo')}
${#request.getParameter('foo')}
${#request.getContextPath()}
${#request.getRequestName()}
...

    ②#session:直接访问与当前请求关联的javax.servlet.http.HttpSession对象

 ${#session.getAttribute('foo')}
${#session.id}
${#session.lastAccessedTime}
...

    ③servletContext:直接访问与当前请求关联的javax.servlet.ServletContext对象。

 ${#servletContext.getAttribute('foo')}
${#servletContext.contextPath}
...

⒏相关配置

 #Thymeleaf 编码
spring.thymeleaf.encoding=UTF-8
#禁用Thymeleaf缓存,使用热部署静态文件
spring.thymeleaf.cache=false
#使用HTML5标准
spring.thymeleaf.mode=HTML5

    

Thymeleaf相关补充的更多相关文章

  1. apache相关补充

    apache相关补充 sendfile机制 1)不用sendfile的传统网络传输过程: read(file, tmp_buf, len) write(socket, tmp_buf, len) 2) ...

  2. SSM整合以及相关补充

    SSM整合以及相关补充 我们在前面已经学习了Maven基本入门,Spring,SpringMVC,MyBatis三件套 现在我们来通过一些简单的案例,将我们最常用的开发三件套整合起来,进行一次完整的项 ...

  3. jQuery Validate和Thymeleaf相关

    jQuery Validate https://www.cnblogs.com/liuhongfeng/p/5135676.html https://www.cnblogs.com/linjiqin/ ...

  4. GlusterFS分布式存储集群部署记录-相关补充

    接着上一篇Centos7下GlusterFS分布式存储集群环境部署记录文档,继续做一些补充记录,希望能加深对GlusterFS存储操作的理解和熟悉度. ======================== ...

  5. Linux文件属性相关补充及软硬连接

    第1章 文件属性相关 1.1 文件的属性 1.1.1 扩展名 windows  通过扩展名区分不同的类型的文件 linux 扩展名是给人类看的 方便我们区分不同类型文件 .conf      配置文件 ...

  6. property相关补充

    # Author : Kelvin # Date : 2019/1/25 15:20 class Foo: def __init__(self): self.original_price = 100 ...

  7. 数据结构(C语言版)-C语言和C++相关补充

    引用类型作形参的三点说明 (1)传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化.(2)引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作:而一般变量作参数,形参与实参就占用 ...

  8. springboot做api服务时不使用thymeleaf的相关警告DefaultTemplateResolverConfiguration 的消除

    springboot在不配置thymeleaf相关属性的情况下,会提示如下的问题 DefaultTemplateResolverConfiguration - Cannot find template ...

  9. spring boot结合thymeleaf

    1.在pom文件中加入thymeleaf相关的依赖 spring-boot-starter-thymeleaf 2.在resource文件夹下创建 template文件夹,在template文件夹中创 ...

随机推荐

  1. vim: 基本知识;

    1. 函数: function!   funcName(para.) content; endfunction 如果添加!,将覆盖已存在的重名函数: 注: 该博文为扩展型: 2.调用外部命令: exe ...

  2. 一名全栈设计师的Mac工具箱(设计,开发,效率)

        我喜欢把自己定义为一个会一些设计的全栈工程师.在一些大型企业项目中,我一般担任架构师的角色,而到了我自己负责的个人或开源项目中,我就成了一名全栈设计师.我喜欢用自学而来的那些设计技能进行网站或 ...

  3. 字符设备驱动(六)按键poll机制

    title: 字符设备驱动(六)按键poll机制 tags: linux date: 2018-11-23 18:57:40 toc: true --- 字符设备驱动(六)按键poll机制 引入 在字 ...

  4. Tensorflow object detection API 搭建物体识别模型(二)

    二.数据准备 1)下载图片 图片来源于ImageNet中的鲤鱼分类,下载地址:https://pan.baidu.com/s/1Ry0ywIXVInGxeHi3uu608g 提取码: wib3 在桌面 ...

  5. 运维监控-基于yum的方式部署 Zabbix Agent 4.0 版本

    运维监控-基于yum的方式部署 Zabbix Agent 4.0 版本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 上一篇博客我们分享了如何基于yum的方式部署zabbix 4. ...

  6. python django基础五 ORM多表操作

    首先在创建表的时候看下分析一下 1.作者表和作者详细地址表  一对一关系 理论上谁都能当主表 把Author设置成主表 au=models.OneToOneField(to='AuthorDetail ...

  7. Git(管理修改)

    现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...

  8. spring-data-redis集成ehcache实现缓存

    1.结构 2.pom.xml <?xml version="1.0" encoding="UTF-8"?><project xmlns=&qu ...

  9. Golang入门教程(四)变量声明

    Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 一.Go的语言结构 1.Go的语言基础部分由这几个部分组成 包声明 引入包 函数 变量 语句&表达式 注释 比如下面这个简单 ...

  10. Nginx 之六: Nginx服务器的正向及反向代理功能

    一:Nginx作为正向代理服务器: 1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代 ...