本文共 3466 字,大约阅读时间需要 11 分钟。
SpringBoot并不推荐使用jsp,但是支持一些模板引擎技术:
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较于其他的模板引擎,它有如下四个极吸引人的特点:
接下来,我们就通过入门案例来体会Thymeleaf的魅力:
编写一个controller方法,返回一些用户数据,放入模型中,将来在页面渲染
@GetMapping("/list")public String all(ModelMap model) { // 查询用户 Listusers = this.userService.queryAll(); // 放入模型 model.addAttribute("users", users); // 返回模板名称(就是classpath:/templates/目录下的html文件名) return "users";}
直接引入启动器:
切换thymeleaf为3.0.9版本 org.springframework.boot spring-boot-starter-thymeleaf //springboot默认导入的是2.1.6版本3.0.9.RELEASE 2.2.2
SpringBoot会自动为Thymeleaf注册一个视图解析器:
与解析JSP的InternalViewResolver类似,Thymeleaf也会根据前缀和后缀来确定模板文件的位置:
classpath:/templates/
.html
所以如果我们返回视图:users
,会指向到 classpath:/templates/users.html
一般我们无需进行修改,默认即可。
根据上面的文档介绍,模板默认放在classpath下的templates文件夹,我们新建一个html文件放入其中:
编写html模板,渲染模型中的数据:
注意,把html 的名称空间,改成:xmlns:th="http://www.thymeleaf.org"
会有语法提示
首页 欢迎光临!
id 姓名 用户名 年龄 性别 生日 1 张三 zhangsan 20 男 1980-02-30
我们看到这里使用了以下语法:
${}
:这个类似与el表达式,但其实是ognl的语法,比el表达式更加强大th-
指令:th-
是利用了Html5中的自定义属性来实现的。如果不支持H5,可以用data-th-
来代替 th:each
:类似于c:foreach
遍历集合,但是语法更加简洁th:text
:声明标签中的文本 <td th-text='${user.id}'>1</td>
,如果user.id有值,会覆盖默认的1接下来,我们打开页面测试一下:
Thymeleaf会在第一次对模板解析之后进行缓存,极大的提高了并发处理能力。但是这给我们开发带来了不便,修改页面后并不会立刻看到效果,我们开发阶段可以关掉缓存使用:
# 开发阶段关闭thymeleaf的模板缓存spring.thymeleaf.cache=false
注意:
在Idea中,我们需要在修改页面后按快捷键:`Ctrl + Shift + F9` 对项目进行rebuild才可以。eclipse中没有测试过。
我们可以修改页面,测试一下。
UTF-8 UTF-8 1.8 3.0.11.RELEASE 2.2.2 org.springframework.boot spring-boot-starter-thymeleaf org.webjars jquery 3.3.1 org.webjars bootstrap 4.0.0
Signin Template for Bootstrap
转载地址:http://uaxab.baihongyu.com/