Spring Boot----freemark使用
项目创建
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2、配置(测试环境中需要添加)
spring:
application:
name: test-freemarker #指定服务名
freemarker:
cache: false #关闭模板缓存,方便测试
settings:
template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
使用
在resource目录下创建templates目录,freemark默认从这里面找所有的xx.ftl文件
ftl文件
<table>
<tr>
<td>姓名</td>
<td>年龄</td>
<td>出生日期</td>
<td>钱包</td>
<td>最好的朋友</td>
<td>朋友个数</td>
<td>朋友列表</td>
</tr>
<#if stus??>
<#list stus as stu>
<tr>
<td>${stu.name!''}</td>
<td>${stu.age}</td>
<td>${(stu.birthday?date)!''}</td>
<td>${stu.mondy}</td>
<td>${(stu.bestFriend.name)!''}</td>
<td>${(stu.friends?size)!0}</td>
<td>
<#if stu.friends??>
<#list stu.friends as firend>
${firend.name!''}<br/>
</#list>
</#if>
</td>
</tr>
</#list>
</#if>
</table>
<br/>
<#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
<#assign data=text?eval />
开户行:${data.bank} 账号:${data.account}
</body>
</html>
语法
ftl文件的注释
<#--xx-->
擦值表达式
Hello ${name}!
遍历List
<table>
<tr>
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
<td>钱包</td>
</tr>
<#list stus as stu>
<tr>
<td>${stu_index + 1}</td>
<td <#if stu.name =='小明'>style="background:red;"</#if>>${stu.name}</td>
<td>${stu.age}</td>
<td >${stu.mondy}</td>
</tr>
</#list>
</table>
遍历HashMap
遍历HashMap方式1:<br/>
姓名:${stuMap['stu1'].name}<br/>
遍历HashMap方式2:<br/>
姓名:${stuMap.stu1.name}<br/>
遍历HashMap方式3:<br/>
<table>
<tr>
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
<td>钱包</td>
</tr>
<#list stuMap?keys as k>
<tr>
<td>${k_index + 1}</td>
<td>${stuMap[k].name}</td> //注意此时不能使用${stuMap.k.name}
<td>${stuMap[k].age}</td>
<td >${stuMap[k].mondy}</td>
</tr>
</#list>
</table>
if指令
<td <#if stu.nane=='小明'> style="background:cornfloverblue;" </#if>>${stu.nane}</td>
同
<#if stu.nane == '小明'>
<td style="background:cornfloverblue;">${stu.nane}</td>
</#if>
<#if stu.nane != '小明'>
<td>${stu.nane}</td>
</#if>
算术符号
<#if a>1></#if>,不能使用‘>’,使用gt
<#if (a>1)></#if>,或者这样使用
逻辑与:&&
逻辑或: ||
逻辑非:!
空值处理
<#if stus??></#if> :如果stus不为空
缺省值${()!''},只要括号中有一个属性为空,那么直接返回‘’
${(stuMap.stu.name)!''} //如果stuMap.stu为null,如果不设置默认值直接报错,此时如果为null,直接返回''
内建函数
1、得到某个集合的大小
${集合?size}
2、格式化时间
显示年月日:${today?date}
显示时分秒:${today?time)
显示年月日时分秒:${today?datetime}<br>
自定义格式化:${today?string("yyyy年w月")}
3、数字
如果Model添加了一个数字
Model.addtribute("num",123456789)
此时
${num}--->123,456,789
如果需要直接显示123456789
${num?c}
4、导入一个new.ftl,和在new.ftl使用变量currentNav
<#assign currentNav="personal" /> <#include "common/navbar-tpl.ftl" />
<#if currentNav??>
<script type="text/javascript">
$("#"+"${currentNav}").addClass("active");
</script>
</#if>
文件静态化
1、基于本地文件
public void test() throws IOException, TemplateException {
//定义配置类
Configuration configuration = new Configuration(Configuration.getVersion());
//得到classpath的路径
String classpath=this.getClass().getResource("/").getPath();
//定义模板路径(template存放着ftl文件)
configuration.setDirectoryForTemplateLoading(new File(classpath+"/template/"));
//获取模板文件内容
Template template = configuration.getTemplate("test.ftl");
//定义数据模型
HashMap<String, String> map = new HashMap<>();
map.put("user","小明");
//此时string就是一个html文件
String string = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
//写出文件
FileUtils.writeStringToFile(new File("xx"),string,"utf-8");
}
2、基于网络数据字符串
public void test() throws IOException, TemplateException {
//定义配置类
Configuration configuration = new Configuration(Configuration.getVersion());
//模板内容
String templateString="" +
"<html>\n" +
" <head><meta charset="UTF-8"></head>\n" +
" <body>\n" +
" 名称:${user}\n" +
" </body>\n" +
"</html>";
//加载模板
//模板加载器
StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
stringTemplateLoader.putTemplate("template",templateString);
configuration.setTemplateLoader(stringTemplateLoader);
Template template = configuration.getTemplate("template","utf-8");
//定义数据模型
HashMap<String, String> map = new HashMap<>();
map.put("user","小明");
//此时string就是一个html文件
String string = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
//写出文件
FileUtils.writeStringToFile(new File("xx.html"),string,"utf-8");
}

浙公网安备 33010602011771号