freemarker教程

语法以及常用函数,注意事项都有很详细的讲解,收藏了。

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}&nbsp;
</#list>


<br/>---------------------------------<br/>
序列的链接操作
<#list <#--["e"] + ["a","b","c"]--> (1..5) + (6..9) as item>
${item}&nbsp
</#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>&nbsp 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}&nbsp;
</#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]}&nbsp;
</#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

原文地址:https://www.cnblogs.com/beenupper/p/3355407.html