10分钟带你学会thymeleaf

引入命名空间

<html xmlns:th="http://www.thymeleaf.org">

HTML中的使用

1. 表达式(和下面的设置属性值一起使用)

1.变量表达式 ${…}
获取后端(springmvc)传递的模型数据

<span th:text="${user.nickname}"></span>

2.消息表达式 #{…}

<span th:text="#{user.nickname}"></span>

3.${…}和#{…}的区别:
#{…}是${…}的扩展,不仅可以获取后端传递的数据,还可以获取国际化文件的数据

4.选择表达式 *{…}

<div th:object="${user}">
    <img th:src="*{avatar}" alt="">
    <span th:text="*{nickname}"></span>
</div>

相当于

<img th:src="${user.avatar}" alt="">
<span th:text="${user.nickname}"></span>

就是配合${…}使用减少代码冗余,如果一个对象有很多个属性,建议用这种方式

5.链接表达式 @{…}

<img th:src="@{/images/logo.png}"></img>
它会去 resources/static/下找

传参的方式:
@{/getUser(id=${user.id})}  <==>  /getUser?id=xxx
@{/user/{id}(id=${user.id})}  <==> /user/xxx
2. 支持的字面量
字符串:<span th:text="'This is a string'"></span>
数字:<span th:text="123"></span>
布尔:<span th:if="${user.isAdmin()}"></span> user.isAdmin() return true or false
null:<span th:if="${user} == null"></span>

算术运算符:+ - * / %
比较运算符:gt(大于)、lt(小于)、ge(大于等于)、le(小于等于)、eq(等于)、ne(不等于)
条件运算符:? :

3. 设置属性值
1. 设置自定义属性值 th:attr

在html标签上设置一些自定义属性,方便请求传参

<span class="classify-item" th:each="classify : ${classifies}" th:text="${classify.classifyName}" th:attr="classify-id=${classify.id}"></span>
<script>
    $(function () {
        $('span.classify-item').click(function () {
            $.ajax({
                url: '/getGoodsByClassifyId',
                method: 'post',
                data: {
                    classifyId: $(this).attr('classify-id'),
                },
                success: function (res) {
                	....
                }
            });
        });
    });
</script>
2. 设置html原生属性值

th:action、th:value、th:href、th:title……html所有属性基本上都能用th:修饰

3. 替换所在标签内的文本内容 th:text
4. 替换所在标签内的文本内容(会解析html) th:utext
4. 迭代器 th:each

相当于Java的增强for循环:for (User user : userList)

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

state 状态变量

<ul>
    <li th:each="book, state : ${books}" th:text="${book.title}"></li>
    
    state.count 当前遍历的是第几个,从1开始
    state.index 当前遍历的是第几个,从0开始
    state.even  当前遍历的是否是第偶数个
    state.odd   当前遍历的是否是第奇数个
    state.first 当前遍历的是否是第一个
    state.last  当前遍历的是否是最后一个
    state.index 当前遍历的是第几个
    state.size  集合中元素的总个数
</ul>
5. 条件语句

th:if 内的值为true显示,false隐藏

<span th:if="${user.isVip}">您是会员</span>

th:unless 正好和th:if相反,它们可以组合成if…else…
th:switch 就是Java里的switch,唯一的区别是不会case穿透,不用加break

6. 内联(写在开始标签和结束标签之间)
<span>[[${content}]]</span>   等价于th:text
<span>[(${content})]</span>   等价于th:utext
7. 组件

用于html代码复用,比如多个页面都有相同的导航栏和页脚,只要在一个页面中设计html,其他页面进行引入(相当于jsp的<jsp:include>)

定义组件:
<footer th:fragment="组件名">
    Copyright © 2020-2021 xxx 版权所有
</footer>
其他页面引入组件:
<div th:insert="~{组件所在的文件名::组件名}"></div><div th:replace="~{组件所在的文件名::组件名}"></div>
th:insert是将组件放到外层div内,th:replace是用组件替换掉这个div

还有一种不写th:fragment的方式,有id或class属性就行,但是我感觉这种方式没有语义化,不好辨别它是组件还是普通的DOM元素,这里就不介绍了

当某个页面使用组件时,组件内部可以使用后端传递到该页面的数据,但是IDEA会报错,所以要加上一个注释(按alt+enter自动加上)

<footer th:fragment="组件名">
    <!--/*@thymesVar id="user" type="cn.lookroot.loop.thymeleafdemo.vo.UserVO"*/-->
    <div th:text="${user.getUsername()}"></div>
</footer>
组件传参

定义部分:

<footer th:fragment="组件名(message)">
    <span th:text="${message}"></span>
</footer>

引用部分:

<div th:replace="~{组件所在的文件名::组件名('传递的参数')}"></div>
组件的局部替换

定义部分:

<footer th:fragment="组件名(message)">
	....
    <div th:replace="${message}"></div>
    ....
</footer>

引用部分:

<div th:replace="~{组件所在的文件名::组件名(~{::#message})}">
    <div id="message">替换的内容</div>
</div>

JavaScript中的使用

  • 必须在script上加上th:inline=“javascript”
  • 有默认值时,/*[[…]]*/这部分必须在默认值前面
<script th:inline="javascript">
    // 不定义默认值(thymeleaf不解析时user时undefined)
    var user = [[${user}]];

    // 定义默认值(thymeleaf不解析时user是null;)
    var user = /*[[${user}]]*/ null;
</script>

CSS中的使用

<style th:inline="css">
    .[[${className}]] {
        color: red;
    }
</style>

内置对象

  • ${#ctx}:上下文对象
  • ${#locale}:java.util.Locale
  • ${#request}:请求
  • ${#session}:会话 ${session.user.name} == session.getAttribute(“user”).getName()
  • ${#param}:请求参数 ${param.username} == request.getParameter(“username”)
  • ……

工具类

格式化时间
<span th:text="${#dates.format(user.createTime), 'yyyy-MM-dd HH:mm'}"></span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值