FreeMarker学习笔记
2016-10-05 01:54
141 查看
语言概述
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序
FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件。
FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境。
为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员
数据类型
一、 直接指定值1. 字符串
单引号或者双引号限定
2. 数值
数值可以直接输入,不需要引号
3.布尔值
直接使用true或false
4.集合
中括号[]包括,集合元素之间用逗号分隔
5.Map对象
用花括号包括,Map中的key-value对之间用冒号分隔,多组key-value对之间用逗号分隔
6.时间对象
root.put("date1", new Date()); ${date1?string("yyyy-MM-dd HH:mm:ss")}
7.JavaBean的处理
freemarker处理javabean可以将类型自动转化
二、 输出变量值
1.顶层变量
最最最普通的变量
2.输出集合元素
可以根据集合元素的索引来输出集合元素,索引用中括号包括。如: 输出[“1”,“2”,“3”]这个名为number的集合,可以用${number[0]}来输出第一个数字。FreeMarker还支持用number[1..2]来表示原 集合的子集合[“2”,“3”]。
3.输出Map元素
对于JavaBean实例,FreeMarker一样把它看作属性为key,属性值为value的Map对象。
输出Map对象时,可以使用点语法或中括号语法
book.author.name book.author["name"] book["author"].name book["author"]["name"]
三、字符串操作
1.字符串连接
方法一:${"Hello, ${user}"} 方法二:${"Hello, " + user + "!"}
2.截取字串
截取子串可以根据字符串的索引来进行
<#assign number="01234"> ${number[0]} <#-- 输出字符0 --> ${number[0..3]} <#-- 输出子串“0123” -->
四、集合连接操作
连接集合的运算符为“+”
五、Map连接操作
Map连接操作的运算符为“+”
六、算术运算符
FreeMarker表达式中支持“+”、“-”、“*”、“/”、“%”运算符。
七、比较运算符
主要记住几个:
大于:gt
大于等于:gte
小于:lt
小于等于:lte
八、逻辑运算符
1. &&: 逻辑与;
2. ||: 逻辑或;
3. !: 逻辑非
九、内建函数
十、空值处理运算符
测试空值处理: <#-- ${sss} 没有定义这个变量,会报异常! --> ${sss!} <#--没有定义这个变量,默认值是空字符串! --> ${sss!"abc"} <#--没有定义这个变量,默认值是字符串abc! -->
所以一般在开发中最常用第二种方法
数据类型常见示例
直接指定值字符串 : “Foo”或 者’Foo’或”It’s \”quoted\”“或r”C:\raw\string”
数字:123.45
布尔值:true, false
序列:[“foo”, “bar”, 123.45], 1..100
哈希表:{“name”:”green mouse”, “price”:150}
检索变量 顶层变量:user
从哈希表中检索数据:user.name, user[“name”]
从序列中检索:products[5]
特殊变量:.main
字符串操作
插值(或连接):”Hello ${user}!”(或”Free” + “Marker”)
获取一个字符:name[0]
序列操作
连接:users + [“guest”]
序列切分:products[10..19] 或 products[5..]
哈希表操作
连接:passwords + {“joe”:”secret42”}
算数运算: (x * 1.5 + 10) / 2 - y % 100
比 较 运 算 : x == y, x != y, x < y, x > y, x >= y, x <= y,
x < y, 等等
逻辑操作:!registered && (firstVisit || fromEurope)
内建函数:name?upper_case
方法调用:repeat(“What”, 3)
处理不存在的值
默认值:name!”unknown” 或者(user.name)!”unknown” 或者name! 或者 (user.name)!
检测不存在的值:name?? 或者(user.name)??
参考:运算符的优先级
模板开发语句
if指令
if语句测试: ${user}是<#if user=="老高">我们的老师</#if> ------------------------------------------------ if else 语句测试: <#if num0 gt 18> <#--不是使用>,大部分时候,freemarker会把>解释成标签结束! --> 及格! <#else> 不及格! </#if> --------------------------------------------------- if else if else语句测试: <#if random gte 90> 优秀! <#elseif random gte 80> 良好! <#else> 一般! </#if>
list指令
List list = new ArrayList(); list.add(new Address("中国","北京")); list.add(new Address("中国","上海")); list.add(new Address("美国","纽约")); root.put("lst", list); -------------------------------------------- 测试list指令: <#list lst as dizhi > <b>${dizhi.country}</b> <br/> </#list>
include指令
测试include指令: <#include "included.txt" />
自定义指令(macro指令)
<#macro m1> <#--定义指令m1 --> <b>aaabbbccc</b> <b>dddeeefff</b> </#macro> ----------------------- <@m1 /><@m1 /> <#--调用上面的宏指令 -->
带参数的宏指令
<#macro m2 a b c > ${a}--${b}--${c} </#macro> ------------------------- <@m2 a="老高" b="老张" c="老马" />
nested指令:
<#macro border> <table border=4 cellspacing=0 cellpadding=4><tr><td> <#nested> </td></tr></table> </#macro> ------------------------ <@border >表格中的内容!</@border>
命名空间
命名空间命名规则
一个重要的规则就是路径不应该包含大写字母,为了分隔词语,使用下划线_,就像wml_form(而不是wmlForm)。
在Servlet中使用Freemarker
相关文章推荐
- FreeMarker 学习笔记
- freemarker学习笔记_快速入门
- FreeMarker系列学习笔记
- freemarker学习笔记
- [Spring MVC]学习笔记--FreeMarker的使用
- freemarker 学习笔记
- Freemarker 学习笔记
- Freemarker学习笔记
- Spring 4.2.4.RELEASE MVC 学习笔记 - 4 - FreeMarker(咋个办呢 zgbn)
- FreeMarker系列学习笔记(2)
- Freemarker学习笔记
- FreeMarker系列学习笔记(1)
- FreeMarker系列学习笔记(2)
- FreeMarker系列学习笔记(1)
- restlet2.1 学习笔记(七) 与Freemarker结合返回Html视图
- freemarker学习笔记_宏和自定义函数
- freemarker 学习笔记
- Struts2、FreeMarker、Sitemesh整合表现层的学习笔记
- freemarker学习笔记
- FreeMarker系列学习笔记