一、freemarker assign 简单使用
assign指令用于为该模板页面创建或替换一个顶层变量,或者创建或替换多个变量等。它的最简单的语法如下:
<#assign name=value [in namespacehash]>,
这个用法用于指定一个名为name的变量,该变量的值为value。此外,FreeMarker允许在使用assign指令里增加in子句。in子句用于将创建的name变量放入namespacehash命名空间中。
freemarker assign 指令用于在页面上定义一个变量,而变量又分为下面两种类型:
(1)定义简单类型
<#assign name="Tom">
my name is ${linkman}
(2)定义对象类型
<#assign info={"mobile":"xxxxxx","address":"china"} >
my mobile is ${info.mobile}, my address is ${info.address}
二、freemarker assign 语法介绍(4种形式)
<#assign name1=value1 name2=value2 ... nameN=valueN>
<#assign same as above... in namespacehash>
<#assign name>
capture this
</#assign>
<#assign name in namespacehash>
capture this
</#assign>
三、freemarker assign 多变量定义
比如:变量 seq 存储一个序列:
<#assign seq = ["foo", "bar", "baz"]>
比如:变量 x 中存储增长的数字:
<#assign x++>
作为一个方便的特性,可以使用一个 assign 标记来进行多次定义,如下所示:
<#assign
seq = ["foo", "bar", "baz"]
x++
四、freemarker assign 变量+命名空间
如果你知道什么是命名空间:assign 指令在命名空间中创建变量。通常它在当前的命名空间 (也就是和标签所在模板关联的命名空间)中创建变量。但如果你是用了 in namespacehash, 那么你可以用另外一个 命名空间 来创建/替换变量。
比如,这里你在命名空间中 /mylib.ftl 创建/替换了变量 bgColor:
<#import "/mylib.ftl" as my>
<#assign bgColor="red" in my>
五、freemarker assign 复杂变量
assign 的极端使用是当它捕捉它的开始标记和结束标记中间生成的输出时。 也就是说,在标记之间打印的东西将不会在页面上显示, 但是会存储在变量中。比如:
<#macro myMacro>foo</#macro>
<#assign x>
<#list 1..3 as n>
${n} <@myMacro />
</#list>
</#assign>
Number of words: ${x?word_list?size}
${x}
将会输出:
Number of words: 6
1 foo
2 foo
3 foo