FreeMarker – 四种变量的用法
freemarker的变量可以分为四种,分别是数据模型的变量(root中的变量),模板中的变量使用(定义的变量),局部变量(在指令中的变量)和循环变量。
【1】数据模型的变量
直接从模型中给模板传值的变量就是数据模型的变量,它把变量的值放在一个map中,在模板中直接可以用。
Java代码:
@RequestMapping("/hello") public ModelAndView hello(){ ModelAndView mv = new ModelAndView(); mv.addObject("msg", "hello world !"); mv.setViewName("hello"); return mv; }
FTL文件:
${msg} //hello world !
【2】模板中的变量
模板中的变量,是使用定义的变量。如果模板中定义的变量和模型中的变量名称一致,不是覆盖,而是隐藏。
FTL文件:
${msg} //Hi
模型中的变量被隐藏后,可以使用.globals可以访问模型中的变量.
${.globals.msg} //hello world !
【3】局部变量
使用local可以声明局部变量。
FTL文件:
<#-- 此时当调用该指令之后,会将模板中的变量msg覆盖为Hi 所以这种方式存在风险,所以一般不使用这种方式在指令中定义变量 --> <#----> ${msg} ${msg}
【4】循环变量
在list循环中定义的变量,循环中的变量只在循环中有效,也是一种临时的变量定义方式。
${msg} //result as follows : 1 2 3
【5】assign指令
assign指令在前面已经使用了多次,它用于为该模板页面创建或替换一个顶层变量。
assign指令的用法有多种,包含创建或替换一个顶层变量,或者创建或替换多个变量等。
它的最简单的语法如下:
这个用法用于指定一个名为name的变量,该变量的值为value。
此外,FreeMarker允许在使用assign指令里增加in子句, in子句用于将创建的name变量放入namespacehash命名空间中。
assign指令还有如下用法:
这个语法可以同时创建或替换多个顶层变量。
此外,还有一种复杂的用法。
如果需要创建或替换的变量值是一个复杂的表达式, 则可以使用如下语法格式:
capture this
在这个语法中,是指将assign指令的内容赋值给name变量.如下例子:
${n} ${x}
上面的代码将产生如下输出:
星期一 星期二 星期三 星期四 星期五 星期六 星期天
虽然assign指定了这种复杂变量值的用法,但是我们也不要滥用这种用法。
如下例子:
Hello ${user}!
以上代码改为如下写法更合适:
发表评论