常见指令
FreeMarker中,使用<#指令名>配置相关指令。
assign 自定义变量指令
使用assign指令可以声明一个新的变量,或者替换一个已经存在的变量。
assgin声明变量必须给一个初始化值,因为freemarker不能处理null。assign指令是个单标签,不需要闭合。
<!-- 声明一个变量 --><#assign str="hello">${str}<br><!-- 使用闭合标签形式设置变量值 --><#assign testValue>这是testValue</#assign><!-- 声明多个变量时,中间使用空格隔开 --><#assign num=1 names=['张三','李四','王五']>${num}<br>${names?join(",")}<br><!-- 对于已经存在的变量,可以对值进行替换 --><#assign businessSum=2356>${businessSum}
if 逻辑判断指令
可以使用if、elseif、else指令来判断是否满足某些条件。
<!-- if判断 --><#if businessSum < 100>businessSum过小:${businessSum}<!-- 判断是否相等 --><#elseif businessSum == 100>businessSum等于100:${businessSum}<!-- 可以用尖括号判断大小,也可以使用 gt、lt等操作符 --><#elseif businessSum gt 100 && businessSum lt 10000>businessSum值为:${businessSum}<#else >businessSum值不合适:${businessSum}</#if><hr><!-- 两个问号判断变量是否存在,存在为true --><#if balance??>balance为:${balance}<!-- 变量不存在 --><#else>balance变量不存在</#if>
list 遍历指令
可以使用list指令来对序列进行遍历。
<#list users as user>${user.name}:${user.age}<br></#list>
list指令遍历时也可以判断集合是否存在,也可以和if指令配合使用:
<!-- 声明一个没有数据的users2 --><#assign users2 = []><!-- if判断中,users2变量存在 --><#if users2??>users2存在<br><#else>users2不存在<br></#if><!-- 使用list指令遍历users2 --><#list users2 as user>${user}<br><!-- users2为空集合时,会进入else --><#else>当前没有数据</#list>
macro 自定义宏指令
可以使用macro指令来自定义一些指令。
格式:
<#macro 指令名>指令内容</#macro><#macro 指令名 参数1 参数2>指令内容</#macro>
使用自定义指令:
<!-- 使用@符号进行调用 --><@指令名 参数1=参数1值 参数2=参数2值></@指令名>
指令可以被多次调用。
自定义指令的指令内容中既可以是普通字符串,也可以包含内置指令。
示例:
<#macro myDirect>这是一个自定义指令<br></#macro><@myDirect></@myDirect><@myDirect></@myDirect><#macro myDirect2 name age>用户名:${name}<br>年龄:${age?string}<br></#macro><@myDirect2 name="张三" age=19></@myDirect2><#macro myDirect3 nameList><#list nameList as tempName>${tempName}<br></#list></#macro><#assign myNameList=["张三","李四","王五"]><@myDirect3 nameList=myNameList></@myDirect3>
nested 占位指令
nested 指令执行自定义指令开始和结束标签中间的模板片段。嵌套的片段可以包含模板中任意合法的内容。
可以配合macro指令使用。在macro中需要显示自定义内容的位置使用nested指令占位,该位置最终会显示自定义指令标签内的内容
<#macro testNested><#nested><br>test<br><#nested></#macro><@testNested><h4>嵌套的内容</h4></@testNested>
import 导入指令
import指令可以引入一个库,也就是说,它创建一个新的命名空间,然后在那个命名空间中执行给定路径的模板。可以使用引入的空间中的指令。
定义一个通用的自定义指令模板文件:commons.ftl
<#macro myDirect><h4>这是commons.ftl中的myDirect指令</h4></#macro><#macro myDirect2><h4>这是commons.ftl中的myDirect2指令</h4></#macro>
在其他模板文件中引入commons.ftl,并使用其中的指令:
<!-- 引入commons.ftl,并将其指定为 common 命名空间 --><#import "commons.ftl" as common><!-- 使用 @命名空间.指令 的形式调用commons.ftl中的自定义指令 --><@common.myDirect></@common.myDirect><@common.myDirect2></@common.myDirect2>
include 包含指令
可以使用 include 指令在你的模板中插入另一个文件(FreeMarker模板文件、txt文件、html文件等)。被包含模板的输出格式是在 include 标签出现的位置插入的。被包含的文件和包含它的模板共享变量,就像是被复制粘贴进去的一样。
引入html文件:<br><#include "test.html"><hr>引入txt文件:<br><#include "test.txt"><hr>引入ftl文件:<br><#include "test.ftl">
注:引入的 txt 文本文件内如果含有FreeMarker语法,也会被解析执行。
例如 txt 文件为下面内容时
<#assign msg2="aaa">这是一个txt文本文件 ${msg2}
最终显示的结果为:这是一个txt文本文件 aaa
