Thymeleaf相关补充
⒈理解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">
© 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相关补充的更多相关文章
- apache相关补充
apache相关补充 sendfile机制 1)不用sendfile的传统网络传输过程: read(file, tmp_buf, len) write(socket, tmp_buf, len) 2) ...
- SSM整合以及相关补充
SSM整合以及相关补充 我们在前面已经学习了Maven基本入门,Spring,SpringMVC,MyBatis三件套 现在我们来通过一些简单的案例,将我们最常用的开发三件套整合起来,进行一次完整的项 ...
- jQuery Validate和Thymeleaf相关
jQuery Validate https://www.cnblogs.com/liuhongfeng/p/5135676.html https://www.cnblogs.com/linjiqin/ ...
- GlusterFS分布式存储集群部署记录-相关补充
接着上一篇Centos7下GlusterFS分布式存储集群环境部署记录文档,继续做一些补充记录,希望能加深对GlusterFS存储操作的理解和熟悉度. ======================== ...
- Linux文件属性相关补充及软硬连接
第1章 文件属性相关 1.1 文件的属性 1.1.1 扩展名 windows 通过扩展名区分不同的类型的文件 linux 扩展名是给人类看的 方便我们区分不同类型文件 .conf 配置文件 ...
- property相关补充
# Author : Kelvin # Date : 2019/1/25 15:20 class Foo: def __init__(self): self.original_price = 100 ...
- 数据结构(C语言版)-C语言和C++相关补充
引用类型作形参的三点说明 (1)传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化.(2)引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作:而一般变量作参数,形参与实参就占用 ...
- springboot做api服务时不使用thymeleaf的相关警告DefaultTemplateResolverConfiguration 的消除
springboot在不配置thymeleaf相关属性的情况下,会提示如下的问题 DefaultTemplateResolverConfiguration - Cannot find template ...
- spring boot结合thymeleaf
1.在pom文件中加入thymeleaf相关的依赖 spring-boot-starter-thymeleaf 2.在resource文件夹下创建 template文件夹,在template文件夹中创 ...
随机推荐
- Linux系统(centos)同步时间方式
.删除本地时间并设置时区为上海 rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 1 yum i ...
- [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵
https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...
- numpy知识点
1.nonzero 对于一维数据来说,将返回符合条件的 下标 >>> b1 = np.array([True, False, True, False]) >>> n ...
- go etcd
etcd介绍 GitHub:https://github.com/coreos/etcd 官网:https://coreos.com/etcd/ 下载:https://github.com/coreo ...
- Zabbix Server 自带模板监控更加灵活MySQL数据库
Zabbix Server 自带模板监控更加灵活MySQL数据库 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zabbix-agent端配置 1>.修改zabbix的 ...
- HDU - 3642 Get The Treasury(线段树求体积交)
https://cn.vjudge.net/problem/HDU-3642 题意 求立方体相交至少3次的体积. 分析 三维的呢..首先解决至少覆盖三次的问题.则用三个标记,更新时的细节要注意. 注意 ...
- HDU - 6304(2018 Multi-University Training Contest 1) Chiaki Sequence Revisited(数学+思维)
http://acm.hdu.edu.cn/showproblem.php?pid=6304 题意 给出一个数列的定义,a[1]=a[2]=1,a[n]=a[n-a[n-1]]+a[n-1-a[n-2 ...
- 转载 IEnumerable和IEnumerator 详解
初学C#的时候,老是被IEnumerable.IEnumerator.ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质. 下 ...
- cuda、cuDNN的相关内容
1.nvidia与cuda需要满足关系: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html/ 2.cuda与cudn ...
- luogu P3233 [HNOI2014]世界树
传送门 我是什么时候写的这题的qwq 首先,发现关键点的总数被限制了,很自然想到虚树,并且,对于一个关键点,他管理的点显然是一个联通块 然后把虚树先建出来,然后两次dfs,第一次是向祖先更新离每个点最 ...