-
表达式语法
申明命名空间,thymeleaf语法验证 <html xmlns:th="http://www.thymeleaf.org"> th:text为thymeleaf命令,${name}为要渲染的变量,通过th:[属性] = ${变量}为html标签属性赋值,变量支持ognl表达式 <div th:text="${name}"></div>
(1) 常用th命令
方法 描述 th:id 替换标签id属性 th:text 替换标签文本 th:utext 支持html的文本替换 th:object 替换为对象,标签内可直接引用该对象属性示例 th:value 替换标签value属性 th:with 赋值为局部变量 th:style 替换标签style属性,设置样式 th:onclick 添加点击事件 th:each 集合,数组循环遍历 示例 th:if 条件判断,为true时渲染该标签示例 th:unless 条件判断,为false时渲染该标签 示例 th:href 替换标签href属性 th:switch 多路选择,与th:case配合使用 示例 th:case th:switch的一个分支 示例 th:selected 为true时selected选择框选中 th:src 替换标签src属性 th:inline 定义js脚本可以使用变量 th:action 替换提交表单的地址 th:remove 删除某个属性 示例 th:attr 设置标签属性,多个属性可以用逗号分隔 th:fragment 布局标签,定义一个代码片段,方便其它地方引用 示例 th:assert 与th:fragment连用,用于参数验证 示例 th:include 布局标签,替换内容到引入的文件,Thymeleaf 3.0 之后不推荐使用 示例 th:insert 布局标签,替换内容到引入的文件 示例 th:replace 布局标签,替换整个标签到引入的文件 示例 th:block 空标签 示例 th:alt-title 替换img标签alt与title属性 th:attr 添加多个属性及属性值 示例 th:attrappend 已有属性值追加 示例 th:classappend 已有class属性值追加 示例 th:inline 设置内联 示例 (2) 常用变量获取方式
方法 描述 ${…} 变量表达式,用于变量的获取 @{…} 链接表达式,一般和 th:href、th:src进行结合使用 示例 #{…} 消息表达式,用于从国际化文件中取值 ~{…} 代码块表达式,一般和模版布局的语法一起使用 示例 *{…} 选择变量表达式,与th:object连用 [[${…}]] 在页面上直接输出变量,常用于js中获取变量 ${${key}} 预处理,把${key}获取的值作为外层变量的key -
内置对象 示例
(1) 环境对象方法 描述 #ctx
#root
#vars
#object获取Thymeleaf自己的IContext对象 #requset
#httpServletRequest如果是web程序,可以获取HttpServletRequest对象 #response 如果是web程序,可以获取HttpServletReponse对象 #session
#httpSession如果是web程序,可以获取HttpSession对象 #servletContext 如果是web程序,可以获取HttpServletContext对象 #locale 获取java.util.Locale对象 (2) 全局对象
方法 描述 #dates 处理java.util.date的工具对象 #calendars 处理java.util.calendar的工具对象 #numbers 用来对数字格式化的方法 #objects #strings 用来处理字符串的方法 #bools 用来判断布尔值的方法 #arrays 用来护理数组的方法 #lists 用来处理List集合的方法 #sets 用来处理set集合的方法 #maps 用来处理map集合的方法 #aggregates 数字数组求和及平均值 #messages 操作国际化文件 #ids 获取序列字符串 #conversions 类型转换 #uris url处理 #execInfo 获取模板处理信息 -
运算 示例
分类 符号 算数运算符 + - * / % 逻辑运算 and or not/! 比较运算 gt(>) lt(<) ge(>=) le(<=) not(!) eq (==) neq/ne(!=) 条件运算 ?: -
文本操作
符号 说明 + 示例 || 示例 -
示例
(1) 提取变量
通过 th:object 获取一个对象,子标签元素可通过*{变量}获取变量值 <div th:object="${user}"> <div th:text="*{name}"></div> </div>
(2) 遍历
遍历list为多个div标签,item为遍历出的对象,stat为遍历的状态对象<a href="#stat"></a> <div th:each="item,stat: ${list}"> <span th:text="${item}"></span> <span th:text="${stat.index}"></span> </div>
(3) 条件
<span th:if="${number} == 24">为true显示</span> <span th:unless ="${number} == 24">为false显示</span>
(4) 多路选择
th:case="*"表示其他情况,放在最后 <div th:switch="${number}"> <p th:case="'12'">number为12时显示</p> <p th:case="'24'">number为24时显示</p> <p th:case="*">其他时显示</p> </div>
(5) 支持方法调用
获取变量字符串值的长度 <div th:text="${name.length()}"></div> 调用Date对象的getTime() <span th:text="${date.getTime()}"></span>
(6) js中获取变量
//script标签中通过th:inline="javascript"来声明这是要特殊处理的js脚本 //var variable = /*[[Thymeleaf表达式]]*/ "静态环境下的默认值"; var variable = /*[[${number}]]*/ 0;
(7) 访问地址
转换url为全路径,并且可设置参数 <a th:href="@{/a/b(a=${a},b=${b})}" >查看</a> 等价为: <a th:href="/ctx/a/b?a=1&b=2" >查看</a>
(7) 运算符
显示数字除6的余数值 <div th:text="${number}%6"></div> 布尔类型取反 <span th:text="not (${number} >13)"></span> 显示数字是否为2的布尔值 <div th:text="${number} eq 2"></div> 三元运算符,number为2显示是,否则显示否 <div th:text="${number} eq 2 ?'是':'否'"></div> 设置默认值,number为null时显示0 <div th:text="${number} ?: 0 "></div>
(8) 添加多对属性
多属性用逗号分割 <div th:attr="a='b',c='d'">123</div>
(9) 空标签
if为true时只渲染"文本",<div th:if="..."></div>中if为true时,渲染的为<div>文本</div> <th:block th:if="...">文本</th:block>
(10) 属性追加
在原属性基础上拼接属性值 <div a="a" b="b" th:attrappend="a=${'1'},b=${'1'}">追加属性值</div> <div class="a" th:classappend="${' b'}">最佳class值</div>
(11) 代码块表达式
插入代码块 templatename为代码块所在模板名(templates目录下直接写文件名,其他情况需加上模板路径) selector为选择器,可为th:fragment定义值,普通id,css等选择器,也可为XPath <div th:insert="〜{templatename :: selector}"></div> 可简化为:<div th:insert="templatename :: selector"></div> ~{ ::selector} 表示在当前页寻找 ~{templatename} 表示引入完整页面
(12) 布局标签
定义模板 <div th:fragment="fragmentId"> 定义好的模板代码 </div> th:assert对参数断言 <div th:fragment="fragmentId(a,b)" th:assert="(${a}=='a1'),(${b}=='b1')" > 带参数的模板 <span th:text="${a}"></span> <span th:text="${b}"></span> </div> 引用模板 <th:block th:include="include/myTemplate :: fragmentId" /> <th:block th:include="include/myTemplate :: fragmentId('a','b')" /> 动态加载模板 <th:block th:include="include/myTemplate :: (${user.isAdmin}? '模板1' : '模板2' />
(13) 字符串拼接
用户||,可在||之间的字符串中引入变量 <div th:text="|sessionId ${#session.getId()}!|"></div> 在${}里通过+号拼接,注意字符串用单引号引起来,通过OGNL表达式引擎解析 <div th:text="${'sessionId '+#session.getId()+'!'}"></div> 在${}外通过+号拼接,注意字符串用单引号引起来,通过Thymeleaf的引擎解析 <div th:text="'sessionId '+${#session.getId()+'!'}"></div>
(14) 内置对象
javax.servlet.http.HttpServletRequest <div th:text="${#request.getContextPath()}">获取contextPath</div> <div th:text="${#request.getCookies()}">获取cookies数组</div> <div th:text="${#request.getParameterMap()}">获取参数Map</div> javax.servlet.http.HttpServletResponse <div th:text="${#response.getStatus()}">获取响应状态</div> javax.servlet.http.HttpSession <span th:text="${#session.getAttribute('key')}">获取session值</span> <span th:text="${#session.getId()}">获取sessionId</span> javax.servlet.ServletContext <span th:text="${#servletContext.getAttribute('key')}">获取servletContext值</span> <div th:text="${#servletContext.getContextPath()}">获取servletPath值</div> org.thymeleaf.expression.Dates <div th:text="${#dates.format(date,'yyyy-MM-dd')}">日期格式化</div> <div th:text="${#dates.createNow()}">获取当前时间日期</div> org.thymeleaf.expression.Calendars <div th:text="${#calendars.createNow()}">获取当前时间日期的Calendar对象</div> org.thymeleaf.expression.Bools <div th:text="${#bools.isTrue(0)}">判断是否为真(不为null,false,'false',0,'off','no')</div> org.thymeleaf.expression.Numbers <div th:text="${#numbers.formatDecimal(1000,3,2)}">数字格式化,第二参数为整数个数不够前补0,第三参数为小数个数不够后补0</div> org.thymeleaf.expression.Objects <div th:text="${#objects.nullSafe(null,'默认值')}"></div> org.thymeleaf.expression.Strings <div th:text="${#strings.concat(1,2,3,7)}">把不定参拼接成字符串</div> <div th:text="${#strings.substring('abcdef',1,3)}">截取字符串,从1索引截取到3(不包含索引3位置的字符)</div> org.thymeleaf.expression.Arrays <div th:text="${#arrays.isEmpty(array)}">数组判空</div> org.thymeleaf.expression.Lists <div th:text="${#lists.isEmpty(list)}">集合判空</div> org.thymeleaf.expression.Sets <div th:text="${#sets.isEmpty(set)}">集合判空</div> org.thymeleaf.expression.Maps <div th:text="${#maps.isEmpty(set)}">集合判空</div> org.thymeleaf.expression.Aggregates <div th:text="${#aggregates.sum(array)}">数字数组求和</div> <div th:text="${#aggregates.avg(array)}">数字数组求平均值</div> org.thymeleaf.expression.Messages <div th:text="${#messages.msg('key')}">获取国际化配置文件数据</div> org.thymeleaf.expression.Ids <div th:text="${#ids.seq('前缀_')}">获取一个序列字符串</div> <div th:text="${#ids.next('前缀_')}">获取下一个序列字符串</div> <div th:text="${#ids.prev('前缀_')}">获取当前序列字符串</div> org.thymeleaf.expression.ExecutionInfo <div th:text="${#execInfo.getTemplateName()}">获取当前模板名</div> <div th:text="${#execInfo.getNow()}">获取当前时间Calendar对象</div> org.thymeleaf.expression.Conversions <div th:text="${#conversions.convert(123,'String')}">类型转换</div> org.thymeleaf.expression.Uris <div th:text="${#uris.escapePathSegment('/a/b?a=b&c=d')}">只url编码path部分,包含?</div> <div th:text="${#uris.escapePath('/a/b?a=b&c=d')}">只url编码?</div> <div th:text="${#uris.escapeQueryParam('/a/b?a=b&c=d')}">只url编码参数,不包含?</div> <div th:text="${#uris.escapeFragmentId('/a/b?a=b&c=d')}">只url编码片段id</div>
-
状态对象的属性有
缺省状态变量名,有默认值为变量名开头的状态变量 xxStat方法 描述 index, 从0开始的角标 count, 元素的个数,从1开始 size, 总元素个数 current, 当前遍历到的元素 even/odd, 返回是否为奇偶,boolean值 first/last, 返回是否为第一或最后,boolean值 -
删除模板片段的内置值
方法 描述 all 删除包含标签及其所有子标签。 body 请勿删除包含标签,而是删除其所有子标签。 tag 删除包含的标签,但不要删除其子标签。 all-but-first 删除包含标记的所有子标记,第一个标记除外。 none 没做什么。此值对于动态评估很有用。 -
注释
符号 描述 <!-- … --> 标准HTML/XML注释
不会被thymeleaf与浏览器处理,但会复制到页面上<!–/* … */–> Thymeleaf解析器级注释块
thymeleaf处理直接删除<!–// … //–> Thymeleaf仅原型注释块
浏览器不处理,thymeleaf渲染 -
内联
方法 描述 text 文字内联 javascript 脚本内联 dart 脚本内联 <body th:inline="text"> [[${session.user.name}]] </body> <script th:inline="javascript"> var username = /*[[${session.user.name}]]*/; </script>
模板引擎(thymeleaf模板语法)
最新推荐文章于 2023-06-27 16:22:01 发布