springboot整合freemarker案例
1.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yl</groupId>
<artifactId>freemarker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>freemarker</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.application.properties
server.port=8080
# freemarker的配置
#HttpServletRequest中的属性是否可以覆盖controller中的model的同名项
spring.freemarker.allow-request-override=false
#HttpSession中的属性是否可以覆盖controller中的model的同名项
spring.freemarker.allow-session-override=false
# 是否开启缓存
spring.freemarker.cache=false
# 是否检查模板位置
spring.freemarker.check-template-location=true
# 模板使用的编码
spring.freemarker.charset=utf-8
# content-type的值
spring.freemarker.content-type=text/html
# 是否将HttpServletRequest中的属性添加到model中
spring.freemarker.expose-request-attributes=false
# 是否将HttpSession中的属性添加到model中
spring.freemarker.expose-session-attributes=false
# 模板的后缀
spring.freemarker.suffix=.ftlh
# 模板存放的位置
spring.freemarker.template-loader-path=classpath:/templates/
3.实体类
package com.yl.freemarker.model;
import java.io.Serializable;
/**
* @Author: wfj
* @Description:
* @Date: created in 2021/9/11 22:32
* @Version: 1.0v
*/
public class User implements Serializable {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4.controller
package com.yl.freemarker.controller;
import com.yl.freemarker.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.*;
/**
* @Author: wfj
* @Description:
* @Date: created in 2021/9/11 22:33
* @Version: 1.0v
*/
@Controller
public class UserController {
@GetMapping("/hello")
public String hello(Model model) {
List<User> users = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(i);
user.setName("xiaolan"+i);
user.setAge(18);
users.add(user);
}
Map<String,Object> map = new HashMap<>();
map.put("name","yangl");
map.put("age",20);
map.put("salary",7000);
model.addAttribute("info",map);
model.addAttribute("sno","2020001");
model.addAttribute("birth",new Date());
model.addAttribute("users",users);
return "hello";
}
}
5.取普通变量的值
<div>${sno}</div>
6.遍历集合
<!--如何自定义集合并且遍历-->
<#list ['hello','java','jq'] as x>
<div>${x}</div>
</#list>
<!--创建一个存储着1到5数字的集合-->
<!--方式一-->
<#list 1..5 as x>
<div>${x}</div>
</#list>
<!--方式二-->
<#list 5..1 as x>
<div>${x}</div>
</#list>
<!--集合遍历-->
<#list users as user>
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<!--当前元素的索引-->
<td>${user_index}</td>
<!--当前元素后面是否还有元素-->
<td>${user_has_next?string('yes','no')}</td>
</tr>
</#list>
<!--只取某个元素的属性-->
<div>${users[1].age}</div>
<!--只遍历多少条数据,比如只遍历第2到第5条数据-->
<#list users[2..5] as user>
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
</#list>
7.遍历map
<!--自定义map并且遍历-->
<#assign usermap={"name":"小兰","age":18}>
<!--遍历方式一:获取所有的key-->
<#list usermap?keys as key>
<div>${key}--${usermap[key]}</div>
</#list>
<!--遍历方式二:获取所有的value-->
<#list usermap?values as value>
<div>${value}</div>
</#list>
7.转义,加r
<div>${r"C:\"}</div>
<div>${r"hello <b>vue</b>"}</div>
8.定义数值,且格式化数值
<!--定义数值-->
<#assign price=99>
<!--格式化数值-->
<!--以人民币符号开头-->
<div>${price?string.currency}</div>
<!--以%号结尾-->
<div>${price?string.percent}</div>
9.定义布尔运算符
<!--定义布尔类型变量-->
<#assign flag=true>
10.三目运算符,用内置函数string实现
<!--三目运算符-->
<div>${flag?string('yes','no')}</div>
11.字符串的拼接
<div>${'hello ${sno}'}</div>
<div>${'hello ' + sno }</div>
<div>${sno[0]}${sno[2]}</div>
<div>${sno[1..3]}</div>
12.集合,map的拼接
<!--集合和map的相加拼接-->
<!--输出1,2,3,6,8,9-->
<#list [1,2,3]+[6,8,9] as x>
<div>${x}</div>
</#list>
<#list (info+{"message":"soho"})?keys as key>
<div>${key}</div>
</#list>
13.算术运算符
<!--算术运算符-->
<div>
<#assign num=15>
<div>${num+10/1*7}</div>
</div>
14.比较运算符
<!--比较运算符-->
<!--if里面的条件成立,才显示内容-->
<div>
<#assign i=10>
<!--等于-->
<#if i = 10>i = 10</#if>
<!--不等于-->
<#if i != 10>i != 10</#if>
<!--等于-->
<#if i == 10>i == 10</#if>
<!--大于-->
<#if i gt 10>i gt 10</#if>
<!--大于等于-->
<#if i gte 10>i gte 10</#if>
<!--小于-->
<#if i lt 10>i lt 10</#if>
<!--小于等于-->
<#if i lte 10>i lte 10</#if>
</div>
15.逻辑运算符
<!--逻辑运算符-->
<div>
<#assign b=20>
<#if (b gt 10 && b lt 100)>aaa</#if>
<#if !(b==10)>bbb</#if>
<#if (b == 100 || 1==1)>ccc</#if>
</div>
16.分支语句
<!--分支语句-->
<!--if else-->
<div>
<#assign score=50>
<#if score gt 90> A
<#elseif score gt 80>B
<#elseif score gt 60>C
<#else>D
</#if>
</div>
<!--switch case-->
<div>
<#assign b=90>
<#switch b>
<#case 10>10<#break>
<#case 20>20<#break>
<#case 30>30<#break>
<#default> 999
</#switch>
</div>
17.内置函数
<!--内置函数-->
<!--首字母大写-->
<div>${"hello"?cap_first}</div>
<!--字符串转小写-->
<div>${"hello"?lower_case}</div>
<!--字符串转大写-->
<div>${"hello"?upper_case}</div>
<!--去除字符串的空格-->
<div>${" hello "?trim}</div>
<!--类型转换-->
<div>${3.14566?int}</div>
<!--获取集合的大小-->
<div>${users?size}</div>
<!--格式化日期显示-->
<div>${birth?string("yyyy-MM-dd")}</div>
18.如何判断某个变量为空?
<!--判空,判断变量qq是否为空,为空不会进入代码块-->
<!--如果不判空,会报错!-->
<#if qq??>
<div>qq</div>
</#if>
<!--防止出现空指针,可以通过如下方式加个默认值,或者空字符串也行-->
<div>${dd!"dd"}</div>
19.如何引入其他模板
20.不解析内容
<!--不解析内容-->
<#noparse >
<#include './student.ftlh'>
<div>
<#assign score=50>
<#if score gt 90> A
<#elseif score gt 80>B
<#elseif score gt 60>C
<#else>D
</#if>
</div>
</#noparse>