freemarker的变量可以分为四种,分别是数据模型的变量【root中的变量】,模板中的变量使用【<#assign>定义的变量】,局部变量【在指令中的变量】,循环变量【在循环中的变量】
数据模型的变量【root中的变量】
直接从模型中给模板传值的变量就是数据模型的变量,它把变量的值放在一个map中,在模板中直接可以用。
@Test publicvoidtest10() { root.put("username","张三"); fu.print("10.ftl",root); } |
${username} |
张三 |
模板中的变量使用【<#assign>定义的变量】
模板中的变量,是使用<#assign定义的变量,如果模板中定义的变量和模型中的变量名称一致,不是覆盖,而是隐藏
<#assignusername="李四"> <#--此时模板中的变量的名称和模型中的变量名称一致,不是覆盖,而是隐藏--> ${username} |
李四 |
模型中的变量被隐藏后,可以使用.globals可以访问模型中的变量
<#--使用.globals可以访问模型中的变量--> ${.globals.username} |
张三 |
局部变量【在指令中的变量】
使用local可以声明局部变量
<#macro test> <#-- 此时当调用该指令之后,会将模板中的变量username覆盖为王五 所以这种方式存在风险,所以一般不使用这种方式在指令中定义变量 --> <#--<#assign username="王五"/>--> <#--使用local可以声明局部变量,所以在marco中非特殊使用局部变量--> <#local username="王五"/> ${username} </#macro> <@test/> ${username} |
王五 李四 |
循环变量【在循环中的变量】
在list循环中定义的变量,循环中的变量只在循环中有效,也是一种临时的变量定义方式
<#list 1..3 asusername> <#--循环中的变量出了循环就消失--> ${username} </#list> ${username} |
1 2 3 李四 |
本文链接:FreeMarker四种变量的用法,本文由huangyineng原创,转载请注明出处