语法以及常用函数,注意事项都有很详细的讲解,收藏了。
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