thymeleaf笔记

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>,其中正常写路径,在需要传参的位置使用大括号{},里面写上参数名即可。

转载于:https://my.oschina.net/u/3723702/blog/3083603

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值