FreeMarker四种变量

分类

freemarker的变量可以分为四种

  • 数据模型的变量【root中的变量】
  • 模板中的变量使用【<#assign>定义的变量】
  • 局部变量【在指令中的变量】
  • 循环变量【在循环中的变量】

数据模型的变量

直接从模型中给模板传值的变量就是数据模型的变量,它把变量的值放在一个map中,在模板中直接可以用。

实例1

@RequestMapping("/hello")
    public ModelAndView hello(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "hello world !");
        mv.setViewName("hello");
        return mv;
    }
FTL文件:
${msg}
//hello world !

实例2

 @Test
public void test10() {
   root.put("username","张三");
   fu.print("10.ftl",root);
}
${username}
//张三

模板中的变量

模板中的变量,是使用<#assign/>定义的变量。如果模板中定义的变量和模型中的变量名称一致,不是覆盖,而是隐藏。

FTL文件:

<#assign msg="Hi"/>
<#--此时模板中的变量的名称和模型中的变量名称一致,不是覆盖,而是隐藏-->

${msg}
//Hi

模型中的变量被隐藏后,可以使用.globals可以访问模型中的变量.

<#--使用.globals可以访问模型中的变量-->
${.globals.msg}
 //hello world !

局部变量

使用local可以声明局部变量。

<#macro test>
   <#--
   此时当调用该指令之后,会将模板中的变量username覆盖为王五
   所以这种方式存在风险,所以一般不使用这种方式在指令中定义变量
   -->
   <#--<#assign  username="王五"/>-->
   <#--使用local可以声明局部变量,所以在marco中非特殊使用局部变量-->
   <#local  username="王五"/>
   ${username}
</#macro>
<@test/>
${username}

循环变量

在list循环中定义的变量,循环中的变量只在循环中有效,也是一种临时的变量定义方式。

<#list 1..3 as msg>
   <#--循环中的变量出了循环就消失-->
   ${msg}
</#list>

//result as follows :
1
2
3

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×