常见指令
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