3.分析Thymeleaf
前面呢,我们已经引入了Thymeleaf,那这个要怎么使用呢?
我们首先得按照SpringBoot的自动配置原理看一下我们这个Thymeleaf的自动配置规则,在按照那个规则,我们进行使用。
我们去找一下Thymeleaf的自动配置类:ThymeleafProperties
@ConfigurationProperties( prefix = "spring.thymeleaf" ) public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING; public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html"; private boolean checkTemplate = true; private boolean checkTemplateLocation = true; private String prefix = "classpath:/templates/"; private String suffix = ".html"; private String mode = "HTML"; private Charset encoding; }
我们可以在其中看到默认的前缀和后缀!
我们只需要把我们的html页面放在类路径下的templates下,thymeleaf就可以帮我们自动渲染了。
使用thymeleaf什么都不需要配置,只需要将他放在指定的文件夹下即可!
编写controller 放在controller包下
package com.jsxs.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; //在template目录下的所有页面,只能通过controller来跳转。 @Controller // 这里我们需要模板引擎的支持,thymplao public class indexController { @RequestMapping("/a") public String index(Model model){ model.addAttribute("msg","Hello JSXS"); return "index"; } }
编写index.html 放在template目录下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> 12212 </body> </html>
测试结果
4.Thymeleaf语法(自动装配 .html)
首先我们应该在Html里面导入 thymeleaf的语句
<html lang="en" xmlns:th="http://www.thymeleaf.org">
(1).五种占位符号(表达式)
- ${xxx} 取变量
- *{xxx} 选择的表达式
- #{xxx} 消息(国际化消息)
- @{xxx} URL
- ~{xxx} 插槽组件
(2).测试占位符
设置controller层
package com.jsxs.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; //在template目录下的所有页面,只能通过controller来跳转。 @Controller // 这里我们需要模板引擎的支持,thymplao public class indexController { @RequestMapping("/a") public String index(Model model){ model.addAttribute("msg","Hello JSXS"); return "index"; } }
设置html层 先导入配置语句 然后设置div块。
为了区分,这里和Vue一样。我们要使用 th: 进行区分 所有的html语句都可以被 thymeleaf 接管 。通过 th:属性
<!DOCTYPE html> <!-- 配置thymeleaf语句--> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <!-- 为了区分,这里和Vue一样。我们要使用 th: 进行区分 所有的html语句都可以被 thymeleaf 接管 。通过 th:属性 --> <div th:text="${msg}"></div> </body> </html>
OK,入门搞定,我们来认真研习一下Thymeleaf的使用语法!
1、我们可以使用任意的 th:attr 来替换Html中原生属性的值!
2、我们能写哪些表达式呢?
Simple expressions:(表达式语法) Variable Expressions: ${...}:获取变量值;OGNL; 1)、获取对象的属性、调用方法 2)、使用内置的基本对象:#18 #ctx : the context object. #vars: the context variables. #locale : the context locale. #request : (only in Web Contexts) the HttpServletRequest object. #response : (only in Web Contexts) the HttpServletResponse object. #session : (only in Web Contexts) the HttpSession object. #servletContext : (only in Web Contexts) the ServletContext object. 3)、内置的一些工具对象: #execInfo : information about the template being processed. #uris : methods for escaping parts of URLs/URIs #conversions : methods for executing the configured conversion service (if any). #dates : methods for java.util.Date objects: formatting, component extraction, etc. #calendars : analogous to #dates , but for java.util.Calendar objects. #numbers : methods for formatting numeric objects. #strings : methods for String objects: contains, startsWith, prepending/appending, etc. #objects : methods for objects in general. #bools : methods for boolean evaluation. #arrays : methods for arrays. #lists : methods for lists. #sets : methods for sets. #maps : methods for maps. #aggregates : methods for creating aggregates on arrays or collections. ================================================================================== Selection Variable Expressions: *{...}:选择表达式:和${}在功能上是一样; Message Expressions: #{...}:获取国际化内容 Link URL Expressions: @{...}:定义URL; Fragment Expressions: ~{...}:片段引用表达式 Literals(字面量) Text literals: 'one text' , 'Another one!' ,… Number literals: 0 , 34 , 3.0 , 12.3 ,… Boolean literals: true , false Null literal: null Literal tokens: one , sometext , main ,… Text operations:(文本操作) String concatenation: + Literal substitutions: |The name is ${name}| Arithmetic operations:(数学运算) Binary operators: + , - , * , / , % Minus sign (unary operator): - Boolean operations:(布尔运算) Binary operators: and , or Boolean negation (unary operator): ! , not Comparisons and equality:(比较运算) Comparators: > , < , >= , <= ( gt , lt , ge , le ) Equality operators: == , != ( eq , ne ) Conditional operators:条件运算(三元运算符) If-then: (if) ? (then) If-then-else: (if) ? (then) : (else) Default: (value) ?: (defaultvalue) Special tokens: No-Operation: _
(3).转义与遍历
特殊字符转义: 就是指直接原样输出 特殊字符不转义: 就是指不原样输出 遍历的两种写法:
编写controller层的数据,变量和数组
package com.jsxs.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import java.util.ArrayList; import java.util.Arrays; //在template目录下的所有页面,只能通过controller来跳转。 @Controller // 这里我们需要模板引擎的支持,thymplao public class indexController { @RequestMapping("/a") public String index(Model model){ model.addAttribute("msg","<h1>Hello JSXS</h1>"); model.addAttribute("user", Arrays.asList("jsxs","JSXS")); return "index"; } }
index.html 接收数据. 第一种接受遍历${遍历的值},第二种接受遍历[[ ${遍历的值}]]
<!DOCTYPE html> <!-- 配置thymeleaf语句--> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <!-- 转义字符 : 原样输出--> <div th:text="${msg}"></div> <!-- 不转义字符: 不原样输出--> <div th:utext="${msg}"></div> <hr> <ul> <li th:each="users:${user}" th:text="${users}"></li> </ul> <hr> <h1 th:each="user1:${user}">[[${user1} ]]</h1> </body> </html>