您的位置:首页 > 其它

freemarker 模板中定义变量

2014-07-14 11:21 555 查看
在模板中可以定义三种类型的变量:

简单变量:它能从模板中的任何位置来访问,或者从使用 include 指令引入的模板访问。可以使用 assign 或 macro 指令来创建或替换这些变量。

局部变量:它们只能被设置在宏定义体内,而且只在宏内可见。一个局部变量的生存周期只是宏的调用过程。可以使用 local 指令在宏定义体内创建或替换局部变量。

循环变量:循环变量是由指令(如 list )自动创建的,而且它们只在指令的开始和结束标记内有效。宏的参数是局部变量而不是循环变量。

示例:使用 assign 创建和替换变量

<#assign x = 1> <#-- 创建变量 x -->
${x}
<#assign x = x + 3> <#-- 替换变量 x -->
${x}
1
4


局部变量也会隐藏(不是覆盖)同名的简单变量。循环变量也会隐藏(不是覆盖)同名的局部变量和简单变量。例如:
<#assign x = "plain">
1. ${x} <#-- 这里是普通变量 -->
<@test/>
6. ${x} <#-- 普通变量的值没有被改变 -->
<#list ["loop"] as x>
7. ${x} <#-- 现在循环变量隐藏了普通变量 -->
<#assign x = "plain2"> <#-- 替换普通变量, 隐藏在这里不起作用-->
8. ${x} <#-- 它仍然隐藏普通变量 -->
</#list>
9. ${x} <#-- 普通变量的新值 -->
<#macro test>
2. ${x} <#-- 这里我们仍然看到的是普通变量 -->
<#local x = "local">
3. ${x} <#-- 现在局部变量隐藏了它 -->
<#list ["loop"] as x>
4. ${x} <#-- 现在循环变量隐藏了局部变量 -->
</#list>
5. ${x} <#-- 现在又可以看到局部变量了 -->
</#macro>
1. plain
2. plain
3. local
4. loop
5. local
6. plain
7. loop
8. loop
9. plain2
注意到循环变量的设置是通过指令调用时创建的(本例中的 <list ...> 标签)。没有其他的方式去改变循环变量的值(也就是说你不能使用定义指令来改变它的值。)。从上面的示例来看,尽管也可以使用一个循环变量来隐藏另外一个。

有时会发生一个变量隐藏数据模型中的同名变量,但是如果想访问数据模型中的变量,就可以使用特殊变量 globals 。例如,假设我们在数据模型中有一个名为 user ,值为”BigJoe”的变量。
<#assign user = "Joe Hider">
${user}
<#-- 打印: Joe Hider -->
${.globals.user} <#-- 打印: Big Joe -->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: