这里写自定义目录标题
thymeleaf:
首先,我们先把application.yml配置好:
spring:
mvc:
#设定静态文件路径,js,css等
static-path-pattern: /static/**
# thymeleaf 静态资源配置
thymeleaf:
prefix: classpath:/templates/
suffix: .html
mode: HTML5
encoding: UTF-8
servlet:
content-type: text/html
#关闭缓存 即时刷新,上线环境推荐改成true
cache: false
**一、**基本使用:
Control类如下,我们分别以静态页面和动态页面为例
@Controller
class WebControl {
//静态页面请求
@RequestMapping("/index0")
fun index0(): String {
return "thymeleaf/index0"
}
}
结构布局:
index0.html代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Thymeleaf
<h1>我是静态页面</h1>
</body>
</html>
可以看到,直接访问到页面内容,这没什么好说的,最简单的一种。
下面我们来看基本引用
//动态页面请求
@RequestMapping("/index1")
fun index1(map: ModelMap): String {
map.addAttribute("name","我是动态页面")
return "thymeleaf/index1"
}
index1.html代码:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Thymeleaf
<h1 th:text="${name}">hell0 World</h1>
</body>
</html>
我们来访问一下页面
**二、**对象引用:
我们先看Control中的内容:
@RequestMapping("/index2")
fun index2(map: ModelMap): String {
val queryAreaById = areaDao?.queryAreaById(1)
map.addAttribute("area",queryAreaById)
return "thymeleaf/index2"
}
这里我们准备了两条数据:
我们再来看看html的代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
thymeleaf对象引用
<div>
<br/>位置名称:<input th:id="${area.areaName}" th:name="${area.areaName}" th:value="${area.areaName}"/>
<br/>优先级:<input th:value="$area.priority"/>
<br/> 更新日期:<input th:value="$area.lastEditTime"/>
</div>
</body>
</html>
运行一波:
我累个擦嘞,咋回事,感觉没错呀
敲黑板了啊!!!!
注意注意注意:
**像area.priority这种对象引用一定要用${area.priority}格式括起来,$area.priority 和 {$area.priority}都不对**
更换后代码如下:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
thymeleaf对象引用
<div>
<br/>位置名称:<input th:id="${area.areaName}" th:name="${area.areaName}" th:value="${area.areaName}"/>
<br/>优先级:<input th:value="${area.priority}"/>
<br/> 更新日期:<input th:value="${area.lastEditTime}"/>
</div>
</body>
</html>
运行
恩,Nice!!
不过,,好像不对呀,这个日期我数据库里面好像不是这个格式的呀!!
不要急,这就引出我们第三个概念:
**三、**时间类型转换:
我们先使用老外的方式试一下
<br/>更新日期:<input th:value="${#dates.format(area.lastEditTime,'yyyy-MM-dd HH:mm:ss')}"/>
行是行了,好像哪里还不对
不错,时间不对!!数据库里面时间是2019年2月23日16点28分59秒,咋查询到了网页上面变成了24号还转点了?
没错!正是东8区没设置,说到这里,我也附上几段代码,毕竟互相学习嘛!!
这是原来的代码:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ebox?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT&userSSL=false
username: root
password: 123456
修改后代码,注意:GMT后面不能直接使用“+”号
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ebox?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&userSSL=false
username: root
password: 123456
新版数据库驱动连接问题可参考:
https://blog.****.net/love20yh/article/details/80799610?utm_source=blogxgwz3
改完之后,重新运行:
完美!!
等等!!还是不够完美,还要优化!!
前面讲到:对象引用每一个都要area.XXX,好麻烦啊,能不能简单一点呢?
当然可以!!
废话不多说,上代码:
<div th:object="${area}">
<br/>位置名称:<input th:id="*{areaName}" th:name="*{areaName}" th:value="*{areaName}"/>
<br/>优先级:<input th:value="*{priority}"/>
<br/> 更新日期:<input th:value="*{lastEditTime}"/>
<br/>更新日期(规范显示):<input th:value="*{#dates.format(lastEditTime,'yyyy-MM-dd HH:mm:ss')}"/>
</div>
运行,完事!
效果一样。是不是感觉简洁了很多?刀那符号也被换掉了,和基本类型几乎都快差不多了,恩,不错,要的就是这效果!!
什么?你说然而并没有?那好吧,萝卜白菜,各有所爱吧,反正我是比较喜欢!!
**四、**text与utext:
还是先从Control开始:
@RequestMapping("/index3")
fun index3(map: ModelMap): String {
map.addAttribute("content","<font color='green'><b>Hello! 磊哥哥</b></font>")
return "thymeleaf/index1"
}
我们可以看到,这次我传给前端的是一串代码
再看一下前端代码:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Thymeleaf
<h1 th:text="${content}">hell0 World</h1>
<h1 th:utext="${content}">hell0 World</h1>
</body>
</html>
就是一个text和utext一个字母的区别
好,来看一下效果图:
从图片可以看出,text是将服务器的内容全部输出了,而utext则将服务器的内容转换后才输出。
**五、**URL:
我们知道,原始的html连接编码通常如下:
<a href="http://www.baidu.com">这是一个网址</a>
我们运行一下看看:
不出所料,还是这个样子
接下来我们来看一下thymeleaf是怎么加载网址的呢
<a th:href="@{http://www.baidu.com}">这是一个网址</a>
没错,它变复杂了,变复杂了,复杂了,杂了,了!!
我们运行一下看看
额呵,洗了佛,根本就没啥区别啊!!
没错,就是这么优秀!!
**六、引入静态资源文件css/js:
1、yml中配置不能丢:static-path-pattern: /static/
2、在static中建一个js文件夹,文件夹下建一个test.js文件
test.js中代码:
alert("你好");
3、我们在html的head标签中引入js
<head>
<meta charset="UTF-8">
<title>Title</title>
<script th:src="@{/static/js/test.js}"></script>
</head>
运行:
“redirect:/th/test”
**七、**条件判断th:if:
先看前端代码:
<form th:action="@{/login}" th:object="${area}" method="post" th:method="post">
<input type="text" th:field="*{areaName}"/>
<input type="submit" value="提交"/>
</form>
后端:
@PostMapping("/login")
fun login(area:Area):String{
LogCat.log(TAG,area?.areaName!!)
return "redirect:/index3"
}
我们提交一下, 控制台输出如下:
可以看到, th:field的值的效果是直接把id、name 和value结合起来了
<div th:if="${area.priority} == 2">优先级高</div>
<div th:if="${area.priority} gt 1">大于</div>
<div th:if="${area.priority} lt 1">小于</div>
<div th:if="${area.priority} ge 1">大于等于</div>
<div th:if="${area.priority} le 1">小于等于</div>
**八、**th:unless 与th:if:
这个就不说了,和th:if刚好是相反的,自己可以试一下
下面我们来看一下选择框
html代码:
<select>
<option>选择框</option>
<option th:selected="${area.areaName eq '东苑'}">东家</option>
<option th:selected="${area.areaName eq '北苑'}">北家</option>
</select>
运行效果:
**九、**循环th:each:
先看一下html代码:
<table>
<tr>
<th>地区名称</th>
<th>优先级</th>
<th>优先级备注</th>
<th>更新日期</th>
</tr>
<tr th:each="user:${areaList}">
<td th:text="${user.areaName}"></td>
<td th:text="${user.priority}"></td>
<td th:text="${user.priority gt 1} ? 优先级高 : 优先级低">优先级不高不低</td>
<td th:text="${#dates.format(user.lastEditTime,'yyyy-MM-dd HH:mm:ss')}"></td>
</tr>
</table>
运行效果图:
**十、**th:switch与th:case:
先看html代码:
<div th:switch="${area.areaName}">
<p th:case="'北苑'">北家的</p>
<p th:case="#{roles.manager}">普通管理员</p>
<p th:case="#{roles.superadmin}">超级管理员</p>
<p th:case="*">别人家的</p>
</div>
咦!!是不是有点懵逼?这个roles哪里来的?
不要急,下面要说的就是这个!!
首先配置:
spring:
#配置i18n 资源文件,供thymeleaf读取
messages:
basename: i18n/messages
cache-seconds: 3600
encoding: UTF-8
然后:
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
哦!!!是不是有种恍然大悟的赶脚?我们再来看看这个文件里面都可以写什么?
#用户自定义权限
roles.manager=manager
roles.superadmin=superadmin
好了,本次分享就到这里了,都快转点了,后面写的有点潦草,将就着看吧,我也是菜鸟一枚,自己写着以后看的!!
好了,废话不多说,挂电话了,各位好梦,晚安!!