html⽀付页⾯模板_畅游SpringBoot系列—
SpingBootThymeleaf模板引擎
⼀.模板引擎的基本概念
⾸先,Thymeleaf模板引擎是什么,简单来说,我们的Web⼯程肯定要⽣成动态的页⾯,之前我们使⽤JSP,要在页⾯上显⽰后台数据的时候使
⽤<% %>或者JSTL调⽤后台数据,也就是后台直接⽣成HTML页⾯+数据的页⾯,直接传送到前台显⽰,JSP就是我们接触到的⼀个模板引擎.
模板引擎在服务器端将模板和数据合成,返回最终的html页⾯,常见的模板引擎有freemarker、velocity、thymeleaf 总⽽⾔之⼀句话:模板引擎在服务器端将模板和数据合成,返回最终的html页⾯
对于SpringBoot来说官⽅建议的模板引擎是Thymeleaf,其实和我们喜闻乐见的JSP相⽐,就是把<%%>换成了Thymeleaf的标记⽽已.
⼆.SpringBoot中Thymeleaf的默认配置
我们先来看⼀下以前我们在Spring MVC的Controller中最常见的⼀段代码
success() { return
return "success"; }
public String success
@RequestMapping(value="/v", method=RequestMethod.GET)public
这段代码的意思,相信熟悉Spring MVC的你,都应该知道,⽆⾮就是页⾯输⼊/v,Spring MVC的视图解析器就会到返回值success,这⾥的返
以success开头,并且以相关后缀结束的⽂件,⽐如:
回值其实就应该是我们已经在Spring MVC配置⽂件中配置好的哪个⽂件夹下的以success开头,并且以相关后缀结束的
xxx/xxx/success.html
⾸先,SpringBoot⽀持所以针对于SpringBoot,这些东西肯定是已经配置好了的,不过⼀定要记住,我
们的SpringBoot是约定⼤于配置
约定⼤于配置的.⾸先,SpringBoot⽀持的后台模板引擎不再是JSP,⽽是Thymeleaf其次,Thymeleaf的相关配置也已经是约定好了
其次,Thymeleaf的相关配置也已经是约定好了
的后台模板引擎不再是JSP,⽽是Thymeleaf
的org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties
public static
final
final String DEFAULT_PREFIX = "classpath:/templates/";public
static final
static final
在这个类中有很关键的两句配置代码public
public static
默认所有的模板⽂件,都应该放在类资源下的templates⽂件夹默认所有的模板⽂件,都应该
默认所有的模板⽂件,都应该String DEFAULT_SUFFIX = ".html";默认所有的模板⽂件,都应该放在类资源下的templates⽂件夹
以.html后缀结尾
三.Thymeleaf的使⽤
当然,我们现在如果只是在Controller中这么写是没有任何作⽤的,我们还需要按照约定做以下⼏步
1. 配置l,加载thymeleaf的starter
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
1. 在⼯程的resources资源⽂件夹下创建templates⽂件夹,所有的模板⽂件都应该放在这个⽂件夹下
2. 创建.html模板⽂件,其实和⼀般的html没区别,但是最好在html⽂件开头添加上Thymeleaf的名称空间,不导⼊其实也没影响,不过在写
页⾯的时候,就没有提⽰了
<html lang="en" xmlns:th="">
现在⼯程的结构,基本上是这个样⼦:
现在的HTML页⾯也很简单,除了添加的⼀句代码,和⼀般的HTML页⾯任何区别
HelloController.java
我们写⼀段简单代码来测试⼀下,⾸先修改HelloController.java⽂件HelloController.java
HelloController { @RequestMapping(value="/v", method=RequestMethod.GET) public class HelloController
public String public class
@Controllerpublic
return "success"; } }
success(Model model) { model.addAttribute("username", "SpringBoot"); return
success
在HelloController的代码中,我添加了Model对象参数,往页⾯传值username,接下来,我们在success.html页⾯,使⽤Thymeleaf的语法来接<!DOCTYPE html><html lang="en" xmlns:th="w
"><head><meta charset="UTF-success.html<!DOCTYPE html>
收参数success.html
8" /><title>Insert title here</title></head><body><h1>成功!</h1>你好:<span th:text="${username}"></span></body></html>
页⾯显⽰:
正确得到了Controller中传递的值,这⾥使⽤Thymeleaf的语法th:text="${xxx}"四.Thymeleaf 3
按照我的例⼦⾛下去,如果稍微不留意,估计你的页⾯就会报错,错误页⾯⼤概是这个样⼦
意思是success页⾯第6⾏有错误,success页⾯不是我们的模板页⾯吗?⽽且第6⾏我们也没有写什么东西啊,为啥会报错?注意,这其实是
注意,这其实是
所以,我thymeleaf⾃⾝的问题,在thymeleaf 2.x版本,要求HTML中元素标签必须要闭合,但是在3.x版本中已经不存在该问题了thymeleaf⾃⾝的问题,在thymeleaf 2.x版本,要求HTML中元素标签必须要闭合,但是在3.x版本中已经不存在该问题了所以,我们只需要将thymeleaf的版本改为3.x就可以了.
怎么改,在官⽅⽂档中有详细的说明,在我们l⽂件的properties属性中,加⼊下⾯的代码就可以了
<properties> <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version></properties>
这⾥的thymeleaf.version就是thymeleaf的版本号,当然现在thymeleaf的版本可能已经不⽌3.0.2了,我们可以到GitHub上查看thymeleaf的最新版本thymeleaf-layout-dialect其实是thymeleaf的布局管理器,他和thymeleaf.version相对于,所以,我们同样可以再GitHub上到thymeleaf-layout-dialect最新版本
最终,我们先阶段能够⽤到最新的thymeleaf 3的版本,可以写成下⾯这个样⼦:
<properties> <thymeleaf.version>thymeleaf-3.0.11.RELEASE</thymeleaf.version> <thymeleaf-layout-
dialect.version>2.3.0</thymeleaf-layout-dialect.version></properties>
关于Thymeleaf的相关语法,这⾥就不再做⼀⼀介绍了,我们后⾯通过案例,⼤家照着做⼀下,慢慢就熟悉了,这些东西也不需要专门去学习,这⾥列举Thymeleaf语法常⽤的表达式
1.属性优先权 th:*
五.Thymeleaf基本语法1.属性优先权 th:*
五.Thymeleaf基本语法
简单来说,这个其实就和JSTL中<c:when>、<c:choose>、<c:forEach>、<c:forTokens>、<c:if>、<c:set>…等等标签类似
具体相关内容如下表:
springmvc常用标签
2.表达式语法
其实和EL表达式是⼀个意思,只不过划分的更加详细

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。