语法以及常用函数,注意事项都有很详细的讲解,收藏了。
http://www.blogjava.net/176142998/archive/2010/07/03/325159.html
以下为学习和测试的数据。
主要学习了:
freemarker的数据类型sequences(可理解为数组), hashes(可理解为对象) 的值遍历与访问,以及相应的内建函数
字符串的常用内建函数
macro宏定义
freemarker中request,session,application作用域的值及顺序,请求参数的获取。
freemarker中获取cookies的值???? 这个测试失败了,还没找到答案
@Controller public class MessageController { @RequestMapping("/ftl") public String showMsg(HttpServletRequest req,Model m){ m.addAttribute("name", "hello freemarker in request");//request作用域name设值 ArrayList<String> userNames = new ArrayList<>(); //request作用于设置一个list集合,在freemarker中遍历 userNames.add("zhangsan"); userNames.add("lisi"); userNames.add("wangwu"); m.addAttribute("userNames",userNames); String[] stuNames = {"st1","st2","st3"}; String[] stuNames2 = {"st221","st222","st223"}; req.setAttribute("stuNames", stuNames2); req.getServletContext().setAttribute("stuNames", stuNames); //application作用于设置一个list集合,在freemarker中遍历 req.getServletContext().setAttribute("name", "hello freemarker in application"); //application作用域name设值 return "index"; } }
index.ftl 用于freemarker模板测试
${name} 打印request中的name。 由于application中也有name,默认寻找顺序为freemarker 数据中 --> request --> session --->application<br/> ----------------------<br/> <#list userNames as name> <font color="red"> ${name} </font><br/> </#list> ----------------------<br/> <#list stuNames as name> <font color="green"> ${name} </font><br/> </#list> --------------------<br/> 字符串: ${"abc"+"def"} <br/> 数字: ${18} <br/> 布尔型: <#if true> hello true world <br/> </#if> 序列: <#list <#--["china",3.0,"japen","asia"]--> 1..5 as item> ${item} </#list> <br/>---------------------------------<br/> 序列的链接操作 <#list <#--["e"] + ["a","b","c"]--> (1..5) + (6..9) as item> ${item}  </#list> <br/>-----------------------------<br/> 字符序列:<#assign user="china"/> ${r"${user[2]} "} = ${user[2]} <br/> ${r"${user[1..5]}"}= ${user[1..4]} <br/> ------------------------------<br/> 数组的长度= <#assign user2=["china","usa"]/> ${user2?size}<br/> <br/>-------------------------------------------<br/> 算数操作符: ${1/3}<br/> ${1+"5"} 合并为了字符串,这是字符串连接符的加号<br/> ------------------------------<br/> format: <#setting number_format="currency"/> <#assign answer=43/> ${answer?string.number}<br/> ${answer?string.percent}<br/> -------------<br/> <#assign myBol = false/> ${myBol?string("ok","no")} ----------------------<br/> <#assign numberToStr = 4/> #{numberToStr;m2}<br/> --------------------------<br/> Macro directivename<br/> <#macro greet> <font size="+2">hello joe!</font> </#macro> invoke= <@greet/> <br/> Macro parameters<br/> <#macro greet person> <font size="+2">${person}</font> </#macro> <@greet person="fred"/> and <@greet person=1/> <br/> Macro parameters Default Values<br/> <#macro happy person="joe" age=18> <font size="+2">${person}</font>  age=${age} </#macro> invoke= <@happy person="lisi"/> <br/> <#macro do_thrice> <#nested> <#nested> <#nested> </#macro> <@do_thrice> Anything. </@do_thrice> <#setting number_format="#"/> <br/>-----------------------------------<br/> 内建函数:<br/> 转大写=${"abc"?upper_case}<br/> 转html=${"abc<br/>"?html}<br/> 首字母大写=${"abc"?cap_first}<br/> 带空格 =${" abc efd"}<br/> 去除空格 =${" abc efd"?trim}<br/> 获取序列的长度=${"abcdef"} 必须是序列,不能是字符串,但字符串可以像序列那样用索引访问字符<br/> 获取字符串得字符=${"abcdef"[2]}<br/> sequences内建函数<br/> <#assign myArr = 1..10/> first = ${myArr?first}<br/> last = ${myArr?last}<br/> reverse = <#list myArr?reverse as i> ${i} </#list> <br/>Hashes内建函数<br/> <#assign myList=[{"name":"zk","age":18},{"name":"lisi","age":22}]/> <#list myList as obj> <!--${obj.name}<br/>--> <#list obj?keys as key> ${obj[key]} </#list> </#list> <br/>---------------------<br/> 判断对象是否存在: <#if ! name22?exists> name22对象不存在!<br/> <#else> ${name22?exists?string("yes existes","no")}<br/> </#if> -----------------<br/> <#--<#assign mouse="zq"/>--> if_exists= ${mouse?if_exists} <br/> 默认值: ${z_name?default("zkkk")} 如果该变量为null则设置。 为空字符串不会设置。<br/> --------------------------<br/> split<br/> <#list "hello,china,usa,"?split(",") as item> ${item}<br/> </#list> -------------<br/> 获取字符串长度 ${"abc"?length} <br/> ---------------------<br/> request中的name = ${Request ["name"]} <br/> session中的name = ${Application ["name"]} <br/> 获取请求参数RequestParameters = ${RequestParameters["mouse"]} <br/>
带请求参数访问 http://localhost:8080/Freemark/ftl?mouse=hahahahhahahahahahah
输出为:
hello freemarker in request 打印request中的name。 由于application中也有name,默认寻找顺序为freemarker 数据中 --> request --> session --->application
----------------------
zhangsan
lisi
wangwu
----------------------
st221
st222
st223
--------------------
字符串: abcdef
数字: 18
布尔型:
hello true world
序列:
1
2
3
4
5
---------------------------------
序列的链接操作
1
2
3
4
5
6
7
8
9
-----------------------------
字符序列:
${user[2]} = i
${user[1..5]}= hina
------------------------------
数组的长度=
2
-------------------------------------------
算数操作符: 0.33
15
------------------------------
format:
43
4,300%
-------------
no
----------------------
4.00
--------------------------
Macro directivename
invoke= hello joe!
Macro parameters
fred
and ¥1.00
Macro parameters Default Values
invoke= lisi age=¥18.00
Anything.
Anything.
Anything.
-----------------------------------
内建函数:
转大写=ABC
转html=abc<br/>
首字母大写=Abc
带空格 = abc efd
去除空格 =abc efd
获取序列的长度=abcdef 必须是序列,不能是字符串,但字符串可以像序列那样用索引访问字符
获取字符串得字符=c
sequences内建函数
first = 1
last = 10
reverse =
10
9
8
7
6
5
4
3
2
1
Hashes内建函数
zk
18
lisi
22
---------------------
判断对象是否存在:
name22对象不存在!
-----------------
if_exists=
默认值:
zkkk 如果该变量为null则设置。 为空字符串不会设置。
--------------------------
split
hello
china
usa
-------------
获取字符串长度
3
---------------------
request中的name = hello freemarker in request
session中的name = hello freemarker in application
获取请求参数RequestParameters = hahahahhahahahahahah