signed

QiShunwang

“诚信为本、客户至上”

Thymeleaf 学习笔记

2021/4/26 18:38:53   来源:

Thymeleaf 官网英文文档:https://www.thymeleaf.org/

平时工作有接触到Thymeleaf 框架,因为网上只有英文的文档,所以自己希望记录一些常用的写法,希望对大家也有用。

  1. 常用的th标签
    有非常多的标签,这里只列出最常用的几个,由于一个标签内可以包含多个th:x属性,其生效的优先级顺序为:
    include,each,if/unless/switch/case,with,attr/attrprepend/attrappend,value/href,src,etc,text/utext,fragment,remove。
关键字功能介绍 案例
th:id替换id <input th:id=”‘xxx’ + ${collect.id}”/>
th:text文本替换 <span class=”name” th:text=”${nickName}”></span>
th:utext支持html的文本替换 <p th:utext=”${htmlcontent}”>conten</p>
th:object替换对象 <div th:object=”${session.user}”>
th:value属性赋值 <input th:value=”${user.name}” />
th:onclick点击事件 < div th:onclick=”‘getCollect()'”>
th:each属性赋值 <tr th:each=”user,userStat:${users}”>
th:if判断条件,true <a th:if=”${userId == collect.userId}” >
th:unless和th:if判断相反 ,false <a th:unless=${session.user != null}>Login</a>
th:include布局标签,替换内容到引入的文件 <head th:include=”layout :: htmlhead” th:with=”title=’xx'”></head>
th:with变量赋值运算 <div th:with=”isEven=${prodStat.count}%2==0″></div>
th:replace布局标签,替换整个标签到引入的文件 <div th:replace=”fragments/header :: title”></div>
th:src图片类地址引入 <img class=”img-responsive” th:src=”@{/img/logo.png}” />
th:remove删除某个属性 <tr th:remove=”all”> 1.all:删除包含标签和所有的孩子。
  1. URL表达式
    URL表达式指的是把一个有用的上下文或回话信息添加到URL,这个过程经常被叫做URL重写,写法:@{……}。
    @{/order/list}
    URL还可以设置参数:@{/order/details(id=${orderId})}
    相对路径:@{…/documents/report}
    让我们看这些表达式:
//链接路径
<a th:href="@{/html/proposal/card}">立即分享邀请卡</a>
//图片地址
<div class="main_box">
  <img th:src="@{/static/images/proposal/index_1.png}"/>
  <img th:src="@{/static/images/proposal/index_2.png}"/>
</div>
  1. 判断表达式 if与unless,if与unless 是相反的用法。
//if:当$(users) 为true 时,nolist元素会加载
<div class="nolist" th:if="${users}">
    暂无邀请记录
</div>
//unless:当$(users) 为false 时,nolist元素会加载
<div class="nolist" th:unless="${users}">
    暂无邀请记录
</div>
  1. 循环数组,th:each
<ul class="list">
   <li th:each="users:${users}">
      <img th:src="${users.userAvatar}"/>
      <span class="name" th:text="${users.nickName}"></span>
      <span class="time" th:text="${#temporals.format(users.modified,'MM-dd HH:mm')}"></span>
   </li>
</ul>
  1. 查找数组中有多少数量:size() (不是.length)
<div th:text="${data.size()}" ></div>
  1. .判断表达式:
gt:great than(大于)>
ge:great equal(大于等于)>=
eq:equal(等于)==
lt:less than(小于)<
le:less equal(小于等于)<=
ne:not equal(不等于)!=
字符串判断是否相同:${#strings.equals(a1,a2)}

// 判断如果数量大于1,才显示。
<div th:if="${data.sentences.size()} gt '1'" class="swiper-pagination audio-pagination"></div>
// 判断两个值是否相等,相等的话就返回'中级',不相等的话就返回'高级'。
<span th:text="${#strings.equals(outline.trainingType,'中级')}?'中级':'高级'"></span>

//只有一个条件,if...else:  if 成绩大于等于80){加上class名为high}, else {class名为low}。
   <div th:classappend="${data.score} gt 80 ? 'high': 'low'"></div>
//三个条件条件,if...elseif...else:   if(成绩大于等于80){加上class名为high},
              else if(成绩大于等于60) {class名为middle},else{class名为low}<div th:classappend="${data.score} ge 80 ? 'high': (${data..score} ge 60 ? 'middle':'low')"></div>
    
  1. 日期时间格式化写法:#temporals.format(变量,’yyyy-MM-dd HH:mm:ss’)。
<span class="time" th:text="${#temporals.format(users.modified,'yyyy-MM-dd HH:mm:ss')}"></span>
  1. js中想调用
<script th:inline="javascript">
  /*<![CDATA[*/
  var data=/*[[${detail.paintings}]]*/null;
  console.log(data);
 /*页面跳转*/
  var path = /*[[${#request.getContextPath()}]]*/null;
  window.location.href=path+"/html/share/homework/"+resultId;
  /*]]>*/
</script>