一. 前言
最近公司的一个项目采用的是freemarker模板引擎,正好借此机会快速入门一下freemarker。
和thymeleaf一样,freemarker作用也是为了将用户界面与业务数据分离。关于thymeleaf的快速入门教程,请查看本站《》SpringBoot:关于thymeleaf的简单使用》一文。
二. 快速入门
以SpringBoot为例,首先在pom.xml中添加freemarker的相关依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
1. 封装数据
接下来准备再一个简单的页面index.html,在resources下的templates文件下,新建index.html (注意,网上有的教程这里会让创建index.ftl文件,但是更建议使用html后缀,使用html后缀也非常简单,只需要在yml中配置suffix为html即可)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> 欢迎${user.age}岁的:${username} </div> </body> </html>
编写对应的controlle,并在controller中向request作用域中添加一个字符串和一个User类对象
@GetMapping("/index") public String index(Model model) { User user = new User(); user.setAge(21); model.addAttribute("username","zhangjia"); model.addAttribute("age",user.getAge()); return "/audit/index"; }
User类:
public class User { private String name; private int age; private int gender; //省略getter,setter }
此时访问http://localhost:8088/audit/index,页面显示:欢迎21岁的zhangjia。
这里有一个坑需要记录一下,一开始的时候为了图方便,直接在controller中创建了一个内部类,并且没有添加getter方法,这两个操作都会导致在index.html中无法获取user的age值
2. 判断
修改controller为以下内容:
@GetMapping("/index") public String index(Model model) { User user = new User(); user.setGender(1); model.addAttribute("user",user); return "/audit/index"; }
假设gender的值为1代表男,值为2代表女,则可以使用if在html中显示相应的性别。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> 您的性别为: <#if user.gender==1> 男 <#elseif user.gender==2> 女 <#else> 其他 </#if> </div> </body> </html>
此时访问该页面,显示您的姓名为:男
3. 循环
修改controller为以下内容:
@GetMapping("/index") public String index(Model model) { List<User> users = new ArrayList<>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setAge(i); users.add(user); } model.addAttribute("users",users); return "/audit/index"; }
在index.html中 ,将controller中的十个用户的age输出:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> <#list users as user> ${user.age}<br> </#list> </div> </body> </html>
此时访问该页面,显示内容为:0123456789
三. 其他功能
1. 关闭缓存
在thymeleaf中,当我们的html页面变动后,如果没有关闭缓存,那么只能通过重启Tomcat来使变动生效,freemarker也是一样的,需要我们手动去关闭模板的检测,在application.yml中,添加以下内容即可:
spring: freemarker: template_update_delay: 0 # 不检测模板
2. 字符串截取 :
通过下标直接获取下标对应的字母: ${name[2]}
起点下标..结尾下标截取字符串:${name[0..5]}
3. ! 指定缺失变量的默认值;一般配置变量输出使用,比如${userId!”错误”}意为如果userId不存在,则显示错误
请登录之后再进行评论