什么是Freemark?
-
定义:是一个java语言开发的模板引擎
-
场景:
- 页面静态化生成(把一个动态加载数据的页面生成html的过程,叫静态化)
- 合同模板生成
- 邮件模板生成
- 自动生成代码
-
原理/组成:
- Template:模板
- Model:模板要用到的数据
- Output:模板+数据渲染后生成的静态html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vkcdGvk8-1597565608881)(%E7%AC%94%E8%AE%B0.assets/image-20200810154719690.png)]
-
使用:
-
导包
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>
-
开发功能
-
准备模板
<html> <head> <meta charset="utf-8"> <title>Freemarker入门</title> </head> <body> <#--我只是一个注释,我不会有任何输出 --> ${name}你好,${message},${user.name} </body> </html>
-
使用模板输出内容
-
加载模板
//1.创建配置类 Configuration configuration=new Configuration(Configuration.getVersion()); //2.设置模板所在的目录 configuration.setDirectoryForTemplateLoading(new File("D:\\ftl")); //3.设置字符集 configuration.setDefaultEncoding("utf-8"); //4.加载模板 Template template = configuration.getTemplate("test.ftl");
-
准备数据
Map map=new HashMap(); map.put("name", "张三"); map.put("message", "欢迎来到传智播客!"); map.put("user", new User());
-
使用Freemark生成内容
// 第一个参数是数据model // 第二个参数是结果的输出流对象 template.process(map, out);
-
-
-
Freemark的语法
assign定义的变量比Java变量的优先级高
-
基本语法
- 1、文本,直接输出的部分
- 2、注释,即<#–…-->格式不会输出
- 3、插值(Interpolation):即${…}部分,将使用数据模型中的部分替代输出
- 4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出
-
FTL指令
-
assign,在模板页面中定义一个变量
<#assign info={"mobile":"13812345678",'address':'北京市昌平区'} > 电话:${info.mobile} 地址:${info.address}
-
include,引入其他页面到当前模板中
<#include "head.ftl"/>
-
if else 指令,用于判断条件
<#if success=true> 你已通过实名认证 <#elseif success=true> 你已通过实名认证 <#else> 你未通过实名认证 </#if>
-
list 指令,用于遍历集合
- as固定语法
<#list goodsList as goods> 商品名称: ${goods.name} 价格:${goods.price}<br> </#list>
-
内置函数
- 日期
Last updated date: ${lastUpdated?string('yyyy-MM-dd')}<br> Last updated date: ${lastUpdated?date}<br> Last updated time: ${lastUpdated?time}<br> Last updated time: ${lastUpdated?datetime}<br>
-
静态生成
- (1)什么时候生成静态页面比较合适呢?
- 套餐、检查组、检查项 CRUD时需要重新生成静态页面
- (2)将静态页面生成到什么位置呢?
- 生成在webapp下的一个静态页面文件夹
- 生成一个文件,放置到nginx的目录
- (3)应该生成几个静态页面呢?
- 套餐列表
- 套餐详情(多个页面)
Spring集成Freemark
-
导包
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>
-
配置
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <!--指定模板文件所在目录--> <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> <!--指定字符集--> <property name="defaultEncoding" value="UTF-8" /> </bean>
指定模板文件所在目录–>
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<!--指定字符集-->
<property name="defaultEncoding" value="UTF-8" />
```