FreeMarker — 模板开发
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>
<!-- 调用函数-->
${sumInt(5, 7)}
输出:
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学习完
莫失精诚赤子心