freemarker study

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 &lt 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')>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章