assign 自定义变量指令

使用 assign 指令可以创建一个新的变量或者替换一个已经存在的变量

  1. <#-- assign自定义变量
  2. 语法:
  3. <#assign 变量名=值 >
  4. <#assign 变量名=值 变量名=值 ...> (定义多个变量)
  5. -->
  6. <#-- 定义字符串变量 -->
  7. <#assign str="Hello">
  8. ${str}
  9. <#-- 定义集合变量 -->
  10. <#assign num=1 names=["李四","王五"] >
  11. ${num} -- ${names?join(",")}

if elseif else 逻辑判断指令

可以使用 if、elseif 和 else 指令来判断条件是否满足某些条件

  1. <#--
  2. if,else,elseif 逻辑判断指令
  3. 语法格式:
  4. <#if condition>
  5. ...
  6. <elseif condition>
  7. ...
  8. <elseif condition>
  9. ...
  10. <else>
  11. ...
  12. </#if>
  13. 注:
  14. 1.condition:指能被计算成布尔值的表达式或布尔值
  15. 2.elseif和else指令为可选,非必需
  16. 3.比较运算符的其他写法
  17. lt 小于
  18. gt 大于
  19. lte 小于等于
  20. gte 大于等于
  21. -->
  22. <#assign score=60 >
  23. <#if score lt 60>
  24. 不及格!
  25. <#elseif score lt 80 >
  26. 及格
  27. <#elseif score lt 100 >
  28. 优秀
  29. <#else>
  30. 完美
  31. </#if>

list 遍历指令

使用 list 指令来对序列进行遍历

  1. <#-- list指令
  2. 格式1:
  3. <#list sequence as item>
  4. </#list>
  5. 格式2:
  6. <#list sequence as item>
  7. <#else>
  8. 当没有选项时,才会执行else语句
  9. </#list>
  10. 注:
  11. 1.else部分可选,当没有迭代项时执行
  12. 2.sequence:可迭代的序列,数组、List、Set、Map?keys、Map?values
  13. 3.item:迭代变量
  14. -->
  15. <#-- 可迭代序列为空时直接遍历会抛出异常,可以作如下两种处理 -->
  16. <#-- 先判空,再遍历 -->
  17. <#assign names=["世界","美好"] >
  18. <#if names?? >
  19. <#list names as name>
  20. ${name}
  21. </#list>
  22. </#if>
  23. <#-- 对空集合作else处理 -->
  24. <#assign names=[] >
  25. <#list names as name>
  26. ${name}
  27. <#else>
  28. 集合为空
  29. </#list>

macro 自定义指令

可以使用 macro 指令来自定义执行一些自定义指令

  1. <#-- macro 自定义指令(宏)
  2. 1.基本使用
  3. 格式:
  4. <#macro 指令名>
  5. 指令内容
  6. </#macro>
  7. 使用:
  8. <@指令名></@指令名>
  9. 2.有参数的自定义指令
  10. 格式:
  11. <#macro 指令名 参数名1 参数名2 ...>
  12. 指令内容
  13. </#macro>
  14. 使用:
  15. <@指令名 参数名1=参数值1 参数名2=参数值2 ...></@指令名>
  16. 注:
  17. 1.指令支持多次使用
  18. 2.自定义指令中可以包含字符串,也可包含内置指令
  19. -->
  20. <#-- 自定义指令示例 -->
  21. <#macro address>
  22. © 1999-2015 The FreeMarker Project.All Right reserved.
  23. </#macro>
  24. <@address></@address>
  25. <#-- 打印9*9乘法表 -->
  26. <#macro cfb>
  27. <#list 1..9 as i>
  28. <#list 1..i as j>
  29. ${j} * ${i} = ${j*i} &nbsp;
  30. </#list>
  31. <br/>
  32. </#list>
  33. </#macro>
  34. <@cfb></@cfb>

nested 占位指令

nested 指令执行自定义指令开始和结束标签中间的模板片段,嵌套的片段可以包含模板中任意合法的内容

  1. <#-- nested 占位指令:
  2. nested 相当于占位符,一般结合macro指令一起使用
  3. 可以将自定义指令中的内容通过nested指令占位,当使用自定义指令时,会将占位内容显示
  4. -->
  5. <#macro test>
  6. 这是一段文本!
  7. <#nested>
  8. <#nested>
  9. </#macro>
  10. <@test><h4> 这是文本后面的内容!</h4></@test>

输出结果:
image.png

import 导入指令

import 指令用于引入一个库,即创建一个新的命名空间,然后在那个命名空间中执行给定路径的模板,可以使用引入的空间中的指令
如 commons.ftl

  1. <#macro cfb num>
  2. <#list 1..num as i>
  3. <#list 1..i as j>
  4. ${j} * ${i} = ${j*i} &nbsp;
  5. </#list>
  6. <br/>
  7. </#list>
  8. </#macro>

在其他的 ftl 页面中通过 import 导入 commons.ftl 的命名空间,使用该命名空间中的指令:

  1. <#-- 导入命名空间 -->
  2. <#import "commons.ftl" as common>
  3. <#-- 使用命名空间中的指令 -->
  4. <@common.cfb 10></@common.cfb>

include 包含指令

include 指令用于在模板中插入另外一个 FreeMarker 模板文件,被包含模板的输出格式是在 include 标签出现的位置引入的。被包含的文件和包含它的模板共享变量,就像被复制粘贴进去的一样

  1. <#-- 包含指令(引入其他页面文件)include -->
  2. <#-- html文件 -->
  3. <#include "test.html">
  4. <#-- freemarker文件 -->
  5. <#include "test.ftl">
  6. <#-- text文件 -->
  7. <#include "test.txt">