1,freemarker是一款模板引擎,一種基於模板的、用來生成輸出文本的通用工具。類似模板引擎還有Velocity,Common Template等。
對於java web開發來說,使用FreeMarker模板,可以將java代碼從頁面中分離出來。開發人員只需關注業務邏輯代碼,而由頁面設計人員去設計顯示效果,兩類人員各司其職,發揮其擅長的一面。FreeMarker註釋:類似HTML的註釋,用<#–和-->來分隔的。任何介於這兩個分隔符(包含分隔符本身)之間的內容會被FreeMarker忽略,不會執行或輸出。
2,freemarker僅僅只是一個視圖層組件,主要用於解析服務器端的數據,展示在視圖層
3, list指令用來遍歷集合中的內容下面是我看視頻直接手敲的代碼,便於加深印象
java代碼片段
@controller
@requestMapping('/')
public class indexController{
@requestMapping(value='/index')
public ModelAndView index(){
ModelAndView mv=new ModelAndView();
mv.addObject('username','hello freemarker')
mv.addObject('userList',this.prepareUserList())
}
//準備用戶數據
public List<User> prepareUserList(){
list<user> list=new ArrayList<User>();
for (int i = 0;i < 5;i++){
User item =new User();
item.setName("用戶"+i)
item.setBirthDay(new Date());
item.add(item)
}
return list;
}
}
html片段
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--freemarker解析語法-->
<h1>${username!}</h1>
<!--list遍歷集合中的內容-->
<ul>
<#list userList as item>
<li>名字:${item.username} 生日:${item.birthday?string('yyyy-mm-dd')}</li>
</#list>
</ul>
</body>
</html>
4,指令
取值指令
//1,常用${var}語法進行取值,當變量未定義時,或值爲null時,默認設置下FreeMarker會
//報錯,可以用${val!}進行取值,這樣當值不存在時,freemarker不會報錯也不會取值
//2,對於包裝對象的值,通過'點'語法:${User.name},取值時可以進行計算,賦值,
//3,轉義html內容(富文本):${val?html}
assign指令
//assign指令用來定義一個變量並給其賦值,或者替換原有變量的值
//格式:
<#assign name=value [name1=value1...]>
<#assign name>capture this</#assign>
//栗子:
<#assign username="master">
include指令
使用include指令,我們可以在當前的模板中插入其他文件的內容。
//格式:
<#include "filepath">
//栗子:
<#include "/copyright_footer.html">
//被包含進來的文件,既可以是靜態頁,也可以是動態頁(即ftl模板)。include指令會先將該文件內容包含進當前模板,
//然後再跟數據模型結合輸出。
邏輯指令
//if else
<#if var==99>
<h1>hi</h1>
<#elseif < 99>
<h1>hello</h1>
<#else>
<h1>哇達西</h1>
</#if>
//??表示元素是否存在
<#if myList??>
<#list myList as item>
${item}
<#list>
</#if>
<#assign var ='python'>
<#if (var =='python'||var == 'java' && var.length==6)||var == 'javascript'>
<font color='red'>python</font>
<#if>
switch指令(也屬於邏輯指令)
<#assign var =10>
<#switch>
<#case 10>
10<br/>
<#break>
<#case 100>
100<br/>
<#break>
<#default>
other
<#break>
</#switch>
函數
<#assign a='hello'>
<#assign b='world'>
<font color='green'>${(a+b)?lower_case}<font>
<font color='green'>${(a+b)?upper_case}<font>
<font color='green'>${(a+b)?last_index_of('o')}<font>
<font color='green'>${(a+b)?replace('o','x')}<font>
自定義函數
<ul>
<#assign myList=[8,1,7,2,3,10,4,5,6]>
<#list sort_int_list(myList) as item>
<li>名字:${item.username} 生日:${item.birthday?string('yyyy-mm-dd')}</li>
</#list>
</ul>
自定義指令
<ul>
<@role user='123456' role='admin';result1,result2>
<#if result1>
<font color='red'>admin</font>
</#if>
<#list result2 as item>
${item}
</#list>
<li></li>
</@role>
</ul>
內建函數
栗子
//同JavaScript中的split。不說也知道
<#list 'a,b,cd,'?split(',') as item>
${item}
<#list>
//時間轉化
<#assign var1='01/03/2017'?date('MM/dd/yyyy')>
<#assign var1='15:05:30'?time('HH/mm/ss')>