首页 > 代码库 > FreeMarker基本语法
FreeMarker基本语法
FreeMarker单独使用的几率比较小,但是它的语法的确简单,用起来比较方便,这次整理了点这方面的资料拿出来分享
1.普通的变量
这是最简单的情况,直接${变量名称} ,如${name}
需要注意的是有的变量是需要转义的如双引号
2.遍历List集合
这个是用的最多的,必须掌握
<#list ["克里斯埃文斯", "斯嘉丽约翰逊", "小罗伯特唐尼"] as x> ${x} </#list>此外,迭代集合对象时,还包含两个特殊的循环变量:
item_index:当前变量的索引值
item_has_next:是否存在下一个对象
也可以使用<#break>指令跳出迭代
这里会逐个输出演员的名称
3.遍历单独的map集合
<#list map?keys as key> ${key}=${map[key]}<br /> </#list>
这个不是很好记,但是用的几率也不小
4.算术运算符
FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , %
5.比较运算符
表达式中支持的比较运算符有如下几个:
1,=或者==:判断两个值是否相等.
2,!=:判断两个值是否不等.
3,>或者gt:判断左边值是否大于右边值
4,>=或者gte:判断左边值是否大于等于右边值
5,<或者lt:判断左边值是否小于右边值
6,<=或者lte:判断左边值是否小于等于右边值
注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:<#if (x>y)>
6.逻辑运算符
和普通程序一样,freemarker也有&&,|| ,!三种
7.if的使用
这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下:
<#if condition>... <#elseif condition>... <#elseif condition>... <#else> ... </#if>
8 include指令
include指令的作用类似于JSP的包含指令,用于包含指定页.include指令的语法格式如下:
<#include filename [options]>
在上面的语法格式中,两个参数的解释如下:
filename:该参数指定被包含的模板文件
options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true.
9 import指令
该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下:
<#import "/lib/common.ftl" as com>
上面的代码将导入/lib/common.ftl模板文件中的所有变量,交将这些变量放置在一个名为com的Map对象中.
10.变量的声明
<#assign num=0/>
11 macro的使用
最后说下list中含有map的遍历,这种情况可以使用点语法或方括号语法.假如有下面的数据模型:
Map root = new HashMap();
Book book = new Book();
Author author = new Author();
author.setName("annlee");
author.setAddress("gz");
book.setName("struts2");
book.setAuthor(author);
root.put("info","struts");
root.put("book", book);
为了访问数据模型中名为struts2的书的作者的名字,可以使用如下语法:
book.author.name //全部使用点语法
book["author"].name
book.author["name"] //混合使用点语法和方括号语法
book["author"]["name"] //全部使用方括号语法
另外freemarker也注意空值的处理,具体的可以参考这篇
http://www.cnblogs.com/liugang/archive/2012/10/19/2730340.html