模板引擎(thymeleaf模板语法)

  1. 表达式语法

    申明命名空间,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:caseth: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
  2. 内置对象 示例
    (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类型转换
    #urisurl处理
    #execInfo获取模板处理信息
  3. 运算 示例

    分类符号
    算数运算符+ - * / %
    逻辑运算and or not/!
    比较运算gt(>) lt(<) ge(>=) le(<=) not(!) eq (==) neq/ne(!=)
    条件运算?:
  4. 文本操作

    符号说明
    +示例
    ||示例
  5. 示例

    (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>
    
  6. 状态对象的属性有
    缺省状态变量名,有默认值为变量名开头的状态变量 xxStat

    方法描述
    index,从0开始的角标
    count,元素的个数,从1开始
    size,总元素个数
    current,当前遍历到的元素
    even/odd,返回是否为奇偶,boolean值
    first/last,返回是否为第一或最后,boolean值
  7. 删除模板片段的内置值

    方法描述
    all删除包含标签及其所有子标签。
    body请勿删除包含标签,而是删除其所有子标签。
    tag删除包含的标签,但不要删除其子标签。
    all-but-first删除包含标记的所有子标记,第一个标记除外。
    none没做什么。此值对于动态评估很有用。
  8. 注释

    符号描述
    <!-- … -->标准HTML/XML注释
    不会被thymeleaf与浏览器处理,但会复制到页面上
    <!–/* … */–>Thymeleaf解析器级注释块
    thymeleaf处理直接删除
    <!–// … //–>Thymeleaf仅原型注释块
    浏览器不处理,thymeleaf渲染
  9. 内联

    方法描述
    text文字内联
    javascript脚本内联
    dart脚本内联
     <body th:inline="text">
        [[${session.user.name}]]
     </body>
     <script th:inline="javascript">
        var username = /*[[${session.user.name}]]*/;
     </script>
    
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑重其事,鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值