freemarker 模板中定义变量
2016-01-05 18:16
211 查看
在模板中能够定义三种类型的变量:
简单变量:它能从模板中的不论什么位置来訪问,或者从使用 include 指令引入的模板訪问。
能够使用 assign 或 macro 指令来创建或替换这些变量。
局部变量:它们仅仅能被设置在宏定义体内,并且仅仅在宏内可见。一个局部变量的生存周期仅仅是宏的调用过程。能够使用 local 指令在宏定义体内创建或替换局部变量。
循环变量:循环变量是由指令(如 list )自己主动创建的,并且它们仅仅在指令的開始和结束标记内有效。宏的參数是局部变量而不是循环变量。
演示样例:使用 assign 创建和替换变量
局部变量也会隐藏(不是覆盖)同名的简单变量。循环变量也会隐藏(不是覆盖)同名的局部变量和简单变量。比如:
没有其它的方式去改变循环变量的值(也就是说你不能使用定义指令来改变它的值。
)。
从上面的演示样例来看,虽然也能够使用一个循环变量来隐藏另外一个。
有时会发生一个变量隐藏数据模型中的同名变量,可是如果想訪问数据模型中的变量,就能够使用特殊变量 globals 。比如,如果我们在数据模型中有一个名为 user ,值为”BigJoe”的变量。
简单变量:它能从模板中的不论什么位置来訪问,或者从使用 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 -->
相关文章推荐
- 数据结构 JAVA描述(十三) 排序总结
- json对象的转换 http://localhost:8080/testhttp/testAction
- iOS多线程之NSThread
- 计算机屏幕坐标系
- leetcode_palindrome
- git for windows
- [jQuery] Filter selector
- 【知识】Java中循环打印出<LIST>的各属性的值
- Android 应用程序升级到 5.0 需要注意的问题
- 搜索 上下建选择搜索提示内容功能
- 通过文件大小和MD5校验识别重复文件
- 分布式文件系统介绍
- iOS中xcode的调试技巧(打印UI层次、po)
- 微型 ORM 的第一篇 DapperLambda发布
- 代码:时间
- vs2012 遇到 “此操作要求使用 IIS 集成管线模式。”
- java初学一
- 递归的例子
- CentOS 7 1511升级python到2.7.11后goagent引发的血案
- 快速开发平台RDP(1)——缘起