一、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