Thymeleaf是一个java类库,他是一个xml/xhtml/html5的模板引擎,可以作为mvc的web应用的view层。
① jar包依赖
org.thymeleaf.extras
thymeleaf-extras-java8time
org.thymeleaf
thymeleaf-spring5
根据以下路径找到源码
查看部分源码:
@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";
...
}
查看以上源码,thymeleaf的自动配置了规则前缀和后缀,所以只要我们把html页面放在calsspath:/templates/下,thymeleaf就能自动渲染。
案例:
新建Controller
@Controller
public class ThController {
@RequestMapping("/success")
public String success(){
//前缀:classpath:/templates/ success 后缀.html
return "success";
}
}
在resources/templates下新建success.html
Title
this is success.html
启动访问:
也可以在配置文件中指定自己的模板,这里通过yml配置修改:
spring:
thymeleaf:
prefix: classpath:/templates/
check-template-location: true
cache: false
suffix: .html
encoding: UTF-8
content-type: text/html
mode: HTML5
html有的属性,Thymeleaf基本都有,而常用的属性大概有七八个。其中th属性执行的优先级从1~8,数字越低优先级越高。
使用Thymeleaf属性需要注意点以下五点:
案例:
1. 在controller中绑定数据:
@Controller
public class ThController {
@RequestMapping("/success")
public String success(Model model){
//1.绑定一个字符串
model.addAttribute("msg","this is a String");
model.addAttribute("msgUtext","this is a String");
//2.绑定一个pojo对象--先去创建一个Emp
Emp emp=new Emp("张三",20);
model.addAttribute("emp",emp);
//3.绑定一个list
List list=new ArrayList();
list.add(emp);
list.add(new Emp("李四",20));
list.add(new Emp("王五",20));
model.addAttribute("emps",list);
//4.绑定一个map
Map map=new HashMap<>();
map.put("Boss",new Emp("boss",30));
model.addAttribute("map",map);
//前缀:classpath:/templates/ success 后缀.html
return "success";
}
}
2. 在html中使用thmeleaf语法获取数据
2.1 先声明命名空间
Title
this is success.html
2.2 th:text和th:value
...
this is success.html
姓名:
年龄:
...
2.3 th:each
...
this is success.html
编号
姓名
年龄
操作
编号
删除/修改
删除/修改
...
说明:
th:each="e,eState : ${emps}"
其中e为循环的每一项,eState是下标属性(可省略),eState属性包括:
index:列表状态的序号,从0开始;
count:列表状态的序号,从1开始;
size:列表状态,列表数据条数;
current:列表状态,当前数据对象
even:列表状态,是否为奇数,boolean类型
odd:列表状态,是否为偶数,boolean类型
first:列表状态,是否为第一条,boolean类型
last:列表状态,是否为最后一条,boolean类型
2.4 th:if
其中关系运算:
gt:great than(大于)
ge:great equal(大于等于)
eq:equal(等于)
lt:less than(小于)
le:less equal(小于等于)
ne:not equal(不等于)
效果展示:
变量表达式使用频率最高,其功能也是非常的丰富。所以我们先从简单的代码块表达式开始,然后是消息表达式,再是链接表达式,最后是变量表达式,随带介绍选择变量表达式。
3.1 ~{…} 代码块表达式
支持两种语法结构:
templatename:模版名,Thymeleaf会根据模版名解析完整路径:/resources/templates/templatename.html,要注意文件的路径。
fragmentname:片段名,Thymeleaf通过th:fragment声明定义代码块,即:th:fragment="fragmentname"
id:HTML的id选择器,使用时要在前面加上#号,不支持class选择器。
代码块表达式的使用:
代码块表达式需要配合th属性(th:insert,th:replace,th:include)一起使用。
案例:
使用后的结果其实如下:
© 2019 The Good Thymes Virtual Grocery
3.2 #{…} 消息表达式
消息表达式一般用于国际化的场景。结构:th:text="#{msg}" 。下面有一块再详细介绍。
3.3 @{…} 链接表达式
链接表达式好处:不管是静态资源的引用,form表单的请求,凡是链接都可以用@{…} 。这样可以动态获取项目路径,即便项目名变了,依然可以正常访问。
#修改项目名,链接表达式会自动修改路径,避免资源文件找不到
server.context-path=/itdragon
链接表达式结构:
无参:@{/xxx}
有参:@{/xxx(k1=v1,k2=v2)} 对应url结构:xxx?k1=v1&k2=v2
引入本地资源:@{/项目本地的资源路径}
引入外部资源:@{/webjars/资源在jar包中的路径}
案例:
3.4 ${…}变量表达式
变量表达式有丰富的内置方法,使其更强大,更方便。
变量表达式功能:
常用的内置对象:
这里以常用的Session举例,用户刊登成功后,会把用户信息放在Session中,Thymeleaf通过内置对象将值从session中获取。
// java 代码将用户名放在session中
session.setAttribute("userinfo",username);
// Thymeleaf通过内置对象直接获取
th:text="${session.userinfo}"
常用的内置方法:
案例:
在controller中绑定字符串
//5.绑定一个字符串
model.addAttribute("itdragonStr","this is a DEMO");
在html中使用内置方法:
...
#strings
Old Str :
toUpperCase :
toLowerCase :
equals :
equalsIgnoreCase :
indexOf :
substring :
replace :
startsWith :
contains :
...