1,freemarker是一款模板引擎,一种基于模板的、用来生成输出文本的通用工具。类似模板引擎还有Velocity,Common Template等。
对于java web开发来说,使用FreeMarker模板,可以将java代码从页面中分离出来。开发人员只需关注业务逻辑代码,而由页面设计人员去设计显示效果,两类人员各司其职,发挥其擅长的一面。FreeMarker注释:类似HTML的注释,用<#–和-->来分隔的。任何介于这两个分隔符(包含分隔符本身)之间的内容会被FreeMarker忽略,不会执行或输出。
2,freemarker仅仅只是一个视图层组件,主要用于解析服务器端的数据,展示在视图层
3, list指令用来遍历集合中的内容下面是我看视频直接手敲的代码,便于加深印象
java代码片段
@controller
@requestMapping('/')
public class indexController{
@requestMapping(value='/index')
public ModelAndView index(){
ModelAndView mv=new ModelAndView();
mv.addObject('username','hello freemarker')
mv.addObject('userList',this.prepareUserList())
}
//准备用户数据
public List<User> prepareUserList(){
list<user> list=new ArrayList<User>();
for (int i = 0;i < 5;i++){
User item =new User();
item.setName("用户"+i)
item.setBirthDay(new Date());
item.add(item)
}
return list;
}
}
html片段
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--freemarker解析语法-->
<h1>${username!}</h1>
<!--list遍历集合中的内容-->
<ul>
<#list userList as item>
<li>名字:${item.username} 生日:${item.birthday?string('yyyy-mm-dd')}</li>
</#list>
</ul>
</body>
</html>
4,指令
取值指令
//1,常用${var}语法进行取值,当变量未定义时,或值为null时,默认设置下FreeMarker会
//报错,可以用${val!}进行取值,这样当值不存在时,freemarker不会报错也不会取值
//2,对于包装对象的值,通过'点'语法:${User.name},取值时可以进行计算,赋值,
//3,转义html内容(富文本):${val?html}
assign指令
//assign指令用来定义一个变量并给其赋值,或者替换原有变量的值
//格式:
<#assign name=value [name1=value1...]>
<#assign name>capture this</#assign>
//栗子:
<#assign username="master">
include指令
使用include指令,我们可以在当前的模板中插入其他文件的内容。
//格式:
<#include "filepath">
//栗子:
<#include "/copyright_footer.html">
//被包含进来的文件,既可以是静态页,也可以是动态页(即ftl模板)。include指令会先将该文件内容包含进当前模板,
//然后再跟数据模型结合输出。
逻辑指令
//if else
<#if var==99>
<h1>hi</h1>
<#elseif < 99>
<h1>hello</h1>
<#else>
<h1>哇达西</h1>
</#if>
//??表示元素是否存在
<#if myList??>
<#list myList as item>
${item}
<#list>
</#if>
<#assign var ='python'>
<#if (var =='python'||var == 'java' && var.length==6)||var == 'javascript'>
<font color='red'>python</font>
<#if>
switch指令(也属于逻辑指令)
<#assign var =10>
<#switch>
<#case 10>
10<br/>
<#break>
<#case 100>
100<br/>
<#break>
<#default>
other
<#break>
</#switch>
函数
<#assign a='hello'>
<#assign b='world'>
<font color='green'>${(a+b)?lower_case}<font>
<font color='green'>${(a+b)?upper_case}<font>
<font color='green'>${(a+b)?last_index_of('o')}<font>
<font color='green'>${(a+b)?replace('o','x')}<font>
自定义函数
<ul>
<#assign myList=[8,1,7,2,3,10,4,5,6]>
<#list sort_int_list(myList) as item>
<li>名字:${item.username} 生日:${item.birthday?string('yyyy-mm-dd')}</li>
</#list>
</ul>
自定义指令
<ul>
<@role user='123456' role='admin';result1,result2>
<#if result1>
<font color='red'>admin</font>
</#if>
<#list result2 as item>
${item}
</#list>
<li></li>
</@role>
</ul>
内建函数
栗子
//同JavaScript中的split。不说也知道
<#list 'a,b,cd,'?split(',') as item>
${item}
<#list>
//时间转化
<#assign var1='01/03/2017'?date('MM/dd/yyyy')>
<#assign var1='15:05:30'?time('HH/mm/ss')>