Version: Next
Freemarker模板引擎
SpringBoot整合Freemarker
- Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- application.yaml
- 配置缓存
- 配置前端页面文件后缀名
- 配置编码
- 配置前端页面在SpringBoot项目中的路径
spring:
freemarker:
cache: false # 缓存配置 开发阶段应该配置为false 因为经常会改
suffix: .html # 模版后缀名 默认为ftl / 还是用ftl吧,html没freemarker语法提示
charset: UTF-8 # 文件编码
template-loader-path: classpath:/templates/
测试
pojo
@Data@AllArgsConstructor@NoArgsConstructorpublic class User {private String username;private int age;private String sex;}Controller
@RequestMapping("/t2")public String test2(Model model) {//classpath:/templates/test.htmlList<User> users = new ArrayList<>();users.add(new User("名字1",18,"男"));users.add(new User("名字2",28,"女"));users.add(new User("名字3",18,"男"));model.addAttribute("users", users);return "testFreemarker";}testFreemarker.ftl
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>测试freemarker</title></head><body><table class=""><tr><td>作者</td><td>教程名称</td><td>内容</td></tr><#list users as u><tr><td>${u.username}</td><td>${u.age}</td><td>${u.sex}</td></tr></#list></table></body></html>
Freemarker语法简介
${}
Freemarker将会输出真实内容来替换大括号内的表达式,这样的表达方式被称为插值
FTL标签 <#...>
与HTML标签有一些相似之处,但是他们是Freemarker指令,不会在输出中打印。FTL标签以#
开头
<!-- -->
注释 与HTML的注释相同
?? (isExist方法)
使用??
询问一个变量是否存在,相当于isExist
方法
如果存在user,则打印欢迎信息
<#if user??><h1>Welcome ${user}!</h1></#if>
基本指令
if指令
- if决定部分内容是否呈现
<h1>
Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>!
</h1>
- if、elif、else
<#if animals.python.price < animals.elephant.price>
Pythons are cheaper than elephants today.
<#elseif animals.elephant.price < animals.python.price>
Elephants are cheaper than pythons today.
<#else>
Elephants and pythons cost the same today.
</#if>
list指令
基本用法
<tr><td>作者</td><td>教程名称</td><td>内容</td></tr><#list users as u><tr><td>${u.username}</td><td>${u.age}</td><td>${u.sex}</td></tr></#list>如果集合内元素数量为0,避免输出无效的html标签,可以用
items
指令<#list misc.fruits><ul><#items as fruit><li>${fruit}</#items></ul></#list>行内遍历时,用
sep
指令指定分隔符<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, </#sep></#list><!-- 输出 --><p>Fruits: orange, banana指定分隔符时,如果集合元素为零,那么设置不显示分隔符,
else
修饰的部分,只有当元素个数为0时才执行<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, <#else>None</#list>分隔符的简写方式,类似三目运算符
<p>Fruits: ${fruits?join(", ", "None")}联合使用
list
、items
、sep
、else
<#list misc.fruits><p>Fruits:<ul><#items as fruit><li>${fruit}<#sep> and</#sep></#items></ul><#else><p>We have no fruits.</#list>
include指令
例如,单独写一个版权信息页面copyright_footer.html
,在所有页面的最下面插入它来显示版权信息
<hr>
<i>
Copyright (c) 2000 <a href="http://www.acmee.com">Acmee Inc</a>,
<br>
All Rights Reserved.
</i>
使用include指令插入版权信息页脚
<html>
<head>
<title>Test page</title>
</head>
<body>
<h1>Test page</h1>
<p>Blah blah...
<#include "/copyright_footer.html">
</body>
</html>