1.thymeleaf特点:是通过特定语法对html的标记做渲染。
thymeleaf要求html的标记按照严谨的语言去编写,即有开始就要有结束。
2.在springboot项目中使用方法:
1.1 导入thymeleaf的依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
1.2 控制层:
model.addAttribute("msg","thymeleaf Test");
return "index";此处的index不是jsp,是html页面。
1.3 新建html页面:
th是thymeleaf的前缀,其中:(写在html的标签里面)
th:text=""是向页面当中输出一些信息;
th:text="${msg}"是将控制层通过model对象传递到视图层的数据输出到界面中。
注意:解决报错:org.xml.sax.SAParseEXception,HTML标签有开始标签没有结束标签的问题;
解决方法:
1.方法一:给报错的标签加一个结束标签。
2,方法二:修改thymeleaf的jar的版本在3.0以上,thymeleaf-layout-dialect的版本在2.0以上。
<properties>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version>
</properties>
修改版本后,thymeleaf对html的标签就没有那么严谨的要求了。
(实践发现2.1.6版本的thymeleaf并没有报错)
1.4 <html xmlns:th="http://www.thymeleaf.org"></html>在html标签中添加这个描述。
3.thymeleaf语言详解:
3.1变量输出与字符串操作:(=后面的值要用双引号"",否则报错)
th:text="${变量}",变量输出,作用:在页面中输出值。
th:value="${变量}",可以将一个值放到input标签的value中。
Thymeleaf内置对象,主要语法:
1.调用内置对象一定要用#
2.大部分的内置对象都以s结尾:如strings、numbers、dates
th:text="${#strings.isEmpty(key)}":判断字符串是否为空,如果为空返回true,否则返回false。
th:text="${#strings.contains(key,'判断的标准')}":判断的标准严格遵循大小写,如果包含返回true,否则返回false。如:${#strings.contains(msg,'T')}
th:text="${#strings.startswith(key,'判断的标准')}":判断当前字符串是否以子串开头,如果是返回true,否则返回false。
th:text="${#strings.endswith(key,'判断的标准')}":判断当前字符串是否以指定的子串结尾,如果是返回true,否则返回fasle。
th:text="${#strings.length(key)}":返回字符串的长度。
th:text="${#strings.indexof(key,'要找的子串')}":返回子串在字符串当中的索引位置下标,如果没找到返回-1。
th:text="${#strings.substring(key,从哪个索引开始)}":返回从指定的索引开始截取到最后的子串。
th:text="${#strings.substring(key,从哪个索引开始,到哪个索引结束)}":返回从指定的索引开始位置截取到指定的结束位置的子串,截取是包含开始不包含结束。
th:text="${#strings.toUpperCase(key)}":返回转为大写的key。
th:text="${#strings.toLowerCase(key)}":返回转为小写的key。
3.2日期格式化处理:
th:text="${#dates.format(key)}":格式化日期,但不指定格式化格式时默认以浏览器默认语言为格式化标准。
th:text="${#dates.format(key,'yyyy/MM/dd')}":按照指定的格式做日期转换。
th:text="${#dates.year(key)}":取年
th:text="${#dates.month(key)}":取月
th:text="${#dates.day(key)}":取日
3.3条件判断
th:if="${sex} == '男'":sex是model传到视图层的变量,双引号里面写判断条件。
举例:
<span th:if="${sex} == '男'">性别:男</span>
<span th:if="${sex} == '女'">性别:女</span>
th:switch="${id}":switch的条件应用,id是从model传过来的变量。
举例:
<div th:switch="${id}">
<span th:case="1">ID为1</span>
<span th:case="2">ID为2</span>
<span th:case="3">ID为3</span>
</div>
3.4迭代遍历
3.4.1 th:each迭代list
举例:u是存储每次循环list中对应一个对象,list是model传送过来的变量即用来遍历的对象。
<tr th:each="u : ${list}">
<td th:text="${u.userid}"></td>
<td th:text="${u.username}"></td>
<td th:text="${u.password}"></td>
</tr>
3.4.2 th:each的状态变量:
举例:
<tr th:each="u,var : ${list}">
<td th:text="${var.index}"></td>
<td th:text="${var.count}"></td>
<td th:text="${var.size}"></td>
<td th:text="${var.even}"></td>
<td th:text="${var.odd}"></td>
<td th:text="${var.first}"></td>
<td th:text="${var.last}"></td>
</tr>
其中var是状态变量。
index:当前迭代器的索引,从0开始;
count:当前迭代对象的计数,从1开始;
size:被迭代对象的长度,即此处的list长度;
even/odd:布尔值,当前循环是否是偶数/奇数,从0开始;
first:布尔值,当期循环的是否是第一条,如果是返回true,否则返回false;
last:布尔值,当前循环的是否是最后一条,如果是返回true,否则返回false;
3.4.3 th:each迭代map:
控制层:
@RequestMapping("/show")
public String show(Model model){
Map<String,Users> map=new hashMap<>();
map.put("u1",new Users(1,"张三",20));
map.put("u2",new Users(2,"李四",22));
map.put("u3",new Users(3,"王五",24));
model.addAtrribute("map",map);
return "index"; //index是html页面
}
视图层(仅记载重要的部分,取map的key,value,对象属性):
<tr th:each="maps : ${map}">
<td th:text="${entry.key}"></td> //key取出来是u1,u2,u3
<td th:text="${entry.value}"></td> //Value取出来的并不直接是Users的属性,而是Users对象信息
<td th:text="${entry.value.userid}"></td>
<td th:text="${entry.value.username}"></td>
<td th:text="${entry.value.password}"></td>
</tr>
3.5域对象操作
3.5.1 HttpServletRequest:从request中取对象
3.5.2 HttpSession:从session中取对象
3.5.3 ServletContext:从application中取对象
举例:
控制层:
@RequestMapping("/show")
public String show(HttpServletRequest request,Model model){
request.setAttribute("req","HttpServletRequest");
request.getSession.setAttribute("sess","HttpSession");
request.getSession.getServletContext().setAttribute("app","Application");
return "index"; //index是html页面
}
视图层:
Request:<span th:text="${#httpServletRequest.getAttribute('req')}"></span>
Session:<span th:text="${session.sess}"></span>
Application:<span th:text="${application.app}"></span>
3.6 URL表达式
th:href
th:src
3.6.1 url表达式语法:
基本语法:@{},即被th标识的href,其双引号里面的url要先用@{}括起来。
3.6.2 URL类型
1.绝对路径:
举例:
<a th:href="@{http://www.sbaidu.com}">绝对路径</a>,该写法等价于<a href="http://www.baidu.com">绝对路径</a>
2.相对路径:
1)相对于当前项目的根:即相对于项目的上下文的相对路径
<a th:href="@{/show}">相对路径</a>,其中的/show即相对于当前项目根路径下的一个叫show的RequestMapping的controller的路径。
2)相对于服务器路径的根:例如一个tomcat中有多个项目。
<a th:href="@{~/项目名称/要访问的某个资源名称}">相对于服务器的根</a>,其中~不能掉,表示服务器下。
3.6.3在url中实现参数传递
<a th:href="@{/show(id=1)}">相对路径传参</a>,其中(id=1),表示在url中传递一个key为id,value为1的参数,可以看到访问时路径后边添加了?id=1。
<a th:href="@{/show(id=1,name=zhangsan)}">相对路径传递多个参数</a>,其中要通过url传递多个参数,只需要用逗号“,”隔开即可。
3.6.4在url中通过restful风格进行参数传递
<a th:href="@{/path/{id}/show(id=1,name=zhangsan)}">相对路径restful传参</a>,其中正常写路径,在需要传参的位置使用大括号{},里面写上参数名即可。
网友评论