一、概念

Freemarker是一款模板引擎,并用来输出文本,网页或配置文件等。

二、语法

2.1 注释

<!-- 在页面可以看的到 -->
<#-- 在页面看不到 -->

2.2 数据类型


布尔类型boolean

不能直接输出,需要转换成字符串,用c转换。

后端返回msg=true
# 错误
    ${msg}
# 正确
    方法一: ${msg?c}
	方法二: ${msg?string}
    方法三: ${msg?string('是字符串','不是字符串')}
    输出
        true
        true
        是字符串

日期类型date

不能直接输出,需要转换成字符串,用c转换。

数值类型

等于java中的int,float,double等类型。

字符串类型

等于java中的字符串。

空值处理

不存在会报错,null也会报错,

解决:传空字符串"",加感叹号{msg!}

sequence类型

等于java中的数组list,set类型。

# 遍历集合
<#list 序列名 as 元素名>
  ${元素名}
</#list>

hash类型

等于java的Map类型。

# key遍历,获取key和key对应的value
    <#list hash?key as key>
    ${key}---${hash[key]}
    </#list>
# value遍历,直接获取value
    <#list hash?values as value>
    	{value}
    </#list>

2.3 常用指令

自定义变量assign

# 定义单个
    <#assign str = "hello">
    	#{str}
    </#assign>
# 定义多个,根据逗号分割成字符串
       <#assign name = "qinag" names=["强1","强2","强3"]>
    	#{str}
		#{names?join(',')}
    </#assign> 

条件控制语句if...elseif...else

# 格式
    <#if 条件1>
    ...
    <#ifelse 条件2>
    ...
    <#ifelse 条件3>
    ...
    <#else>
    ...
    <#/if>
# 条件不为空时才遍历
<#if 序列名??>
    <#list 序列名 as 元素名>
      ${元素名}
    </#list>
</#if>
<#list 序列名 as 元素名>
  ${元素名}
<#else>
    没有条件时执行这部分语句
</#list>

三、自定义指令

可以使用macro定义,可以传参,可以重复使用。

3.1 自定义指令

<#macro phone>
	18912354231
</#macro>

使用自定义指令

<@phone></@phone>

3.2 自定义指令传参

<#macro queryByName name passwd>
	根据用户名查询 - ${name}
	密码是 - ${passwd}
</#macro>

使用自定义传参指令

<@queryByName name='admin' passwd='123456'></@queryByName>

3.3 nested占位指令

<#macro test>
	这是一段文本
	<#nested>
</#macro>

使用nested占位指令

<@test>xxxxxx</@test>

则优先显示“这是一段文本”

四、导入指令

4.1 import

import指令可以导入一个库,它创建一个新的命名空间,然后在那个命名空间中执行给定路径的模板,可以使用引入空间的指令。

commons.ftl

<#maro cfb>
  QQ: 875667601
</#maro>

test.ftl

<#-- 导入命名空间 -->
<#import "commons.ftl" as common>
<#-- 使用导入的命名空间 -->
<@common.cfb></@common.cfb>

4.2 include

include包含指令。

可以使用include指令在模板中插入另外一个模板,被包含的模板输出在include的位置上,像是复制进去了一样。

<#include "test.ftl">
<#include "test.txt">
<#include "test.html">

五、运算符

5.1 算数运算符

# 加 减 乘 除 取模
+ - * / %

5.2 逻辑运算符

# 与 或 非
&& || !

5.3 比较运算符

# 大于 小于 等于 大于等于 小于等于 不等于
>(gt)
<(lt)
=
>=(gte)
<=(lte)
!=

5.4 空值运算符

# 判断是否为空,返回布尔类型
??
${(name??)?string}
# 如果为空,设置默认值
@
${name! '小强'}