FreeMarker — 模板开发
2019-08-14

1 什么是FreeMarker?

官方解释:FreeMarker 是一款模板引擎, 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。

其实FreeMarker的原理就是:模板+数据模型=输出

模板编写为FreeMarker Template Language (FTL),渲染前台界面后需要更改名为 xxx.ftl,同理xxx.jsp

特点:轻量级模版引擎,不需要servlet,web容器其次freemarker是java写的,很多语法很java是有密切联系的

2 FreeMarker测试环境搭建

直接使用IDEA 选择springboot 构建集成环境,勾选上web和freemarker

如果没有选择这这种方法的,在maven里面加入或者引入Jar即可

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></dependency>

用例测试

// 实体类public class User { private Integer id; private String name; private String email; // ...getter and setter}

// Controller类,存储值并跳转到index.htl界面@Controller@RequestMapping(value = "/index")public class IndexController { @RequestMapping(value = "/login") public ModelAndView index(ModelAndView modelAndView) { List<User> userList=new ArrayList<User>(); userList.add(new User(1,"augus","augu@163.com")); userList.add(new User(2,"aili","aili@163.com")); userList.add(new User(3,"beleng","beleng@163.com")); modelAndView.addObject("userList", userList); modelAndView.setViewName("index"); return modelAndView; }}

<!-- 前台--><!DOCTYPE html><html><body><table border="1"> <tr> <th>name</th> <th>email</th> </tr> <!-- 遍历输出--> <#list userList as user> <tr> <th>${user.name}</th> <th>${user.email}</th> </tr> </#list></table></body><html>

测试结果

后台存储的3个用户,显示在前台界面上

3 FreeMarker 知识点

构成

模板由文本+插值+FTL标签+注释组成

文本:HTML原来的内容插值:${}代表的就是插值,一般来说就是后台传过来的值显示在前台用${}表示FTL标签:比如<#list></#list> 不会显示在界面上,和html标签类似注释:<#-- 注释 -->

谨记一点,就是插值只能放在文本中,不能放在FTL标签中,不然渲染模板的时候会报错

正确的示范<h2>${user.name}</h2>错误的示范<#if ${user.name} == "augus"></#if>在FTL标签中,直接user.name 即可,不用插值

语法

定义变量

<#assign var = value > 定义变量并初始化

<!--定义字符串--><#assign str = "hello world" > <!--定义字数值--><#assign num = 13.2 > <!--定义布尔--><#assign flag = true > <!--定义数组--><#assign arr = ["foo", "boo", "get"]/><!--定义map--><#assign uMap={"name":"augus", "email":"augus@163.com"}>

if标签 判断

规范:<#if condition><#elseif condition><#else></#if>

比较运算符:x == y (等于) ,x!=y(不等于) ,x lt y(小于), x lte y(小于等于), x gt y(大于), x gte y (大于等于)

<!--定义数值num--><#assign num = 13.2 > <#if num gt 16> <p>num大于16</p><#elseif num lt 12> <p>num大于16</p><#else> <p>num在12~16的范围中</p></#if>输出: num在12~16的范围中

list标签 循环

规范:<#list hash_or_seq as var></#list>

<!--定义数组--><#assign arrs = ["foo", "boo", "get"]/><!--循环--><#list arr as arr> ${arr},</#list>输出: foo, boo, get,

! 的空值操作

freemarker 针对防止null有特定的操作符

<p>${"name:"+name!}<p/><p>${(maxNumber!)+1}</p>输出: name: 1

在页面中并未存在 name和maxNumber的,通过加 ! 可以处理null值的存在,如果上述例子不加 !操作符,模板加载时会报错 “The following has evaluated to null or missing:”

自定义函数和指令

可以在模板中使用function作为自定义函数,类似于js自定义funciton,在必要的时候直接调用即可

函数规范:<#function name param1 param2 ... paramN>

<!-- 函数测试 --><!-- 定义函数 --><#function sum num1 num2> <#return num1 + num2></#function><!-- 调用函数-->${sumInt7)}输出: 12

在模板中存在多个相同的操作的时候,可以自定义指令,进行重复的操作

指令规范:<#macro name param1 param2 ... paramN></#macro>

<!-- 指令测试 --><#macro prInfo name email> <p>姓名:${name}</p> <p>邮箱:${email}</p></#macro><!--调用自定 @操作符--><@prInfo "张三" "287159@qq.com"/><!-- 前台会将指令区域的值替换后输出HTML-->输出: 姓名:张三 邮箱:287159@qq.com

4 结束

以上内容基本都是FreeMarker的常用知识点,我基本上是参考中文在线手册学习的,这里的FreeMarker知识点都是模板开发,并未涉及到程序开发,如有未涉及的知识点,可以参考FreeMarker中文在线手册,如果有心学习的话,基本上一天之内就可以将FreeMarker学习完

FreeMarker中文手册地址

莫失精诚赤子心

原文出处: https://www.cnblogs.com/augusduan/p/9271516.html