-
前言
Java 开发的模板引擎。官网模板:Template + data-model = output - Apache FreeMarker Manual -
更新
1 | 24-07-23 初始记录 |
快速入门
freemarker 作为 Spring MVC 一种视图格式,默认情况下 SpringMVC 支持 freemarker 视图格式。
Maven 依赖
1 | <!--父工程指定SpringBoot版本--> |
配置文件
1 | # freemarker基本配置 |
代码使用
-
添加 view 映射
1 |
|
-
返回 Controller 注解不要加
@ResponseBody
或@RestController
(这个注解把返回的信息转成 json 返回,不能实现页面跳转的功能) -
返回使用
forward:
1 | return "forward:/pay-error"; |
基础指令
1、注释,即
<#‐‐和‐‐>
,介于其之间的内容会被 freemarker 忽略
2、插值(Interpolation):即${..}
部分,freemarker 会用真实的值代替${..}
3、FTL 指令:和 HTML 标记类似,名字前加#
予以区分,Freemarker 会解析标签中的表达式或逻辑。
4、文本,仅文本信息,这些不是 freemarker 的注释、插值、FTL 指令的内容会被 freemarker 忽略解析,直接输出内容。
List 指令
说明:
_index
:得到循环的下标,使用方法是在 stu 后边加_index
,它的值是从 0 开始
1 | List<Student> stus = new ArrayList<>(); |
1 | <table> |
Map 指令
1 | HashMap<String,Student> stuMap = new HashMap<>(); |
1 | 输出stu1的学生信息:<br/> |
if 指令
1 | <table> |
运算符
-
算数运算符 FreeMarker 表达式中完全支持算术运算,FreeMarker 支持的算术运算符包括:
+
,-
,*
,/
,%
-
逻辑 运算符 逻辑运算符有如下几个: 逻辑与
&&
逻辑或||
逻辑非!
逻辑运算符只能作用于布尔值,否则将产生错误 -
比较运算符 表达式中支持的比较运算符有如下几个:
=
或者==
判断两个值是否相等!=
判断两个值是否不等>
或者gt
判断左边值是否大于右边值>=
或者gte
判断左边值是否大于等于右边值<
或者lt
判断左边值是否小于右边值<=
或者lte
判断左边值是否小于等于右边值
注意:
=
和!=
可以用于字符串,数值和日期来比较是否相等,但=
和!=
两边必须是相同类型的值,否则会产生错误,而且 FreeMarker 是精确比较,“x”,"x ",“X” 是不等的。其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt
等字母运算符代替>
会有更好的效果,因为 FreeMarker 会把>
解释成 FTL 标签的结束字符,当然,也可以使用括号来避免这种情况,如:<#if (x>y)>
空值处理
-
判断某变量是否存在使用
??
用法为:variable??
,如果该变量存在,返回 true,否则返回 false
1 | <#if stus??> |
-
缺失变量默认值使用
!
使用!
要以指定一个默认值,当变量为空时显示默认值。
1 | <#--如果name为空显示空字符串。--> |
内置对象
在 freemarker 中可以访问 Request、Session 等内置对象。
Request: 用于获取 Request 对象中的 attribute 对象。
Session:用于获取 Session 对象中的 attribute 对象。
RequestParameters:用于获取 Request 对象的 parameter 参数(浏览器端发送的请求数据)
-
配置
1 | spring: |
-
例子在 Controller 中设置 request、session 的属性值
1 | //测试内置对象 |
页面获取数据
1 | url请求参数:${RequestParameters['param1']!""} |
BUG
访问报错 404
-
检查是否添加了 view 映射,注意不要加后缀。
-
检查 Controller 层使用的注解:不要加
@ResponseBody
或@RestController
(这个注解把返回的信息转成 json 返回,不能实现页面跳转的功能) -
nacos 配置文件读取失败(
不确定原因重启 nacos 后就好了):使用 nacos 读取配置文件,出现自动装配时 suffix 没有读取到的情况。(本地配置使用.html 可以读取成功,但是放到 nacos 后,FreeMarkerProperties 中的 suffix 属性始终为默认的.ftl
,并且从springboot2.0开始默认的 suffix 为.ftlh
)- 但是这里还是建议使用
.ftl
,不然后序接口调用处可能会出 bug
- 但是这里还是建议使用