http://www.roboticfan.com/blog/user_2005/104/archi

freemarker語法開發指南 http://www.roboticfan.com/blog/user_2005/104/archives/2008/200855144645.shtml 0 推薦 常用語法 EG.一個對象BOOK 1.輸出 ${book.name} 空值判斷:${book.name?if_exists }, ${book.name?default(‘xxx’)}//默認值xxx ${ book.name!"xxx"}//默認值xxx 日期格式:${book.date?string('yyyy-MM-dd')} 數字格式:${book?string.number}--20 ${book?string.currency}--<#-- $20.00 --> ${book?string.percent}—<#-- 20% --> 插入布爾值: <#assign foo=true /> ${foo?string("yes","no")} <#-- yes --> 】內置方法 一:數字型 <#assign answer=42/> ${answer} ${answer?string} <#-- the same as ${answer} --> ${answer?string.number} ${answer?string.currency} ${answer?string.percent} <#setting number_format="0.###E0"/> ${12345?string("0.####E0")} ${answer?string("number")} 等同於:${answer?string.number}. 二:日期型: 預定義格式包括:short ,middle和long。 ${openingTime?string.short} ${openingTime?string.medium} ${openingTime?string.long} 組合使用:${lastUpdated?string.short_long} ${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")} 三:邏輯型 foo?string foo?string("yes", "no") 四:序列的內置方法: first last seq_contains ${x?seq_contains("blue")?string("yes", "no")} seq_index_of seq_last_index_of reverse size sort sort_by 多層次的hash排序 <#assign members = [ {"name": {"first": "Joe", "last": "Smith"}, "age": 40}, {"name": {"first": "Fred", "last": "Crooger"}, "age": 35}, {"name": {"first": "Amanda", "last": "Fox"}, "age": 25}]> Sorted by name.last: <#list members?sort_by(['name', 'last']) as m> - ${m.name.last}, ${m.name.first}: ${m.age} years old chunk:將一個序列分解成幾個序列。 <#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']> <#list seq?chunk(4) as row> <#list row as cell>${cell} <#list seq?chunk(4, '-') as row> <#list row as cell>${cell} chunk經常用於分欄或者表格輸出的格式。 五:hash內置方法: keys: values: 】序列 由逗號分隔的變量列表,由方括號限定,類似java中的一維數組 <#assign seq = ["winter", "spring", "summer", "autumn"]> <#list seq as x> ${x_index + 1}. ${x} <#if x_has_next>, 輸出 1. winter, 2. spring, 3. summer, 4. autumn 】Hashes(散列)-由逗號分隔的鍵-值列表,由大括號限定,鍵和值之間用冒號分隔:{"name":"green mouse", "price":150},鍵和值都是表達式,但是鍵必須是字符串。 <#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}> - Joe is ${ages.Joe} - Fred is ${ages.Fred} - Julia is ${ages.Julia} 結果: - Joe is 30 - Fred is 25 - Julia is 18 】freemarker的空值和默認值 ${user?if_exists} ${user?default('your name')} 判斷對象是不是null <#if mouse?exists> Mouse found <#else> 或<#if book.name?? > Mouse found list 空值判斷 <#if bookList?size = 0> 】算術運算 比較操作符-<#if expression>... 1.)使用=(或==,完全相等)測試兩個值是否相等,使用!= 測試兩個值是否不相等 2.)=和!=兩邊必須是相同類型的值,否則會產生錯誤,例如<#if 1 = "1">會引起錯誤 3.)Freemarker是精確比較,所以"x"、"x "和"X"是不相等的 4.)對數字和日期可以使用<、<=、>和>=,但不能用於字符串 5.)由於Freemarker會將>解釋成FTL標記的結束字符,所以對於>和>=可以使用括號來避免這種情況,例如<#if (x > y)>,另一種替代的方法是,使用lt、lte、gt和gte來替代<、<=、>和>= 邏輯操作符-&&(and)、||(or)、!(not),只能用於布爾值,否則會產生錯誤 <#if x < 12 && color = "green"> We have less than 12 things, and they are green. <#if !hot> <#-- here hot must be a boolean --> It's not hot. 內置函數-用法類似訪問hash(散列)的子變量,只是使用"?"替代".",例如:user?upper_case 下面列出常用的一些函數: 對於字符串 html-對字符串進行HTML編碼 cap_first-使字符串第一個字母大寫 lower_case-將字符串轉換成小寫 trim-去掉字符串前後的空白字符 對於Sequences(序列) size-獲得序列中元素的數目 對於數字 int-取得數字的整數部分(如-1.9?int的結果是-1) 例一: <#-- test的值爲Tom & Jerry --> ${test?html} ${test?upper_case?html} 結果: Tom & Jerry TOM & JERRY 例二: <#-- seasons的值爲"winter", "spring", "summer", "autumn" --> ${seasons?size} ${seasons[1]?cap_first} <#-- left side can by any expression --> ${"horse"?cap_first} 結果: 4 Spring Horse 方法的調用 ${repeat("What", 3)} ${repeat(repeat("x", 2), 3) + repeat("What", 4)?upper_case} 結果: WhatWhatWhat xxxxxxWHATWHATWHATWHAT 操作符優先順序 後綴 [subvarName] [subStringRange] . (methodParams) 一元 +expr、-expr、! 內建 ? 乘法 *、 / 、% 加法 +、- 關係 <、>、<=、>=(lt、lte、gt、gte) 相等 =、!= 邏輯 && 邏輯 || 數字範圍 .. 三.) Interpolation:由${...}或#{...}兩種類型,輸出計算值,可以定義輸出的格式 例一: <#setting number_format="currency"/> <#assign answer=42/> ${answer} ${answer?string} <#-- the same as ${answer} --> ${answer?string.number} ${answer?string.currency} ${answer?string.percent} 結果: $42.00 $42.00 42 $42.00 4,200% 例二: ${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")} ${lastUpdated?string("EEE, MMM d, ''yy")} ${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")} 結果: 2003-04-08 21:24:44 Pacific Daylight Time Tue, Apr 8, '03 Tuesday, April 08, 2003, 09:24:44 PM (PDT) 例三: <#assign foo=true/> ${foo?string("yes", "no")} 結果: yes 例四: <#-- x is 2.582 and y is 4 --> #{x; M2} <#-- 2.58 --> #{y; M2} <#-- 4 --> #{x; m1} <#-- 2.6 --> #{y; m1} <#-- 4.0 --> #{x; m1M2} <#-- 2.58 --> #{y; m1M2} <#-- 4.0 --> 說明:mX-小數部分最小X位;MX-小數部分最大X位。 四.) 註釋:<#--和--> 下面是一個常用的模板例子:

We have these animals:

NamePrice <#list animals as being>
<#if being.size = "large"> ${being.name} <#if being.size="large"> ${being.price} Euros
<#i nclude "/copyright_footer.html"> 注意點: 1.) FreeMarker是區分大小寫的; 2.) FTL標記不能位於另一個FTL標記內部,例如:<#if <#i nclude 'foo'>='bar'>...</if>; 3.) ${…}只能在文本中使用; 4.) 多餘的空白字符會在模板輸出時去除; 5.) 如果使用的指令不存在,會產生一個錯誤消息。 <#-- x的值設定爲5 --> ${x * x - 100} ${x / 2} ${12 % 10} 結果: -75 2.5 2 注意: 操作符兩邊必須是數字;使用"+"時,如果一邊是數字,一邊是字符串,就會自動將數字轉換爲字符串。 使用內建的指令int獲得整數部分: ${(x/2)?int} ${1.1?int} ${1.999?int} ${-1.1?int} ${-1.999?int} 結果: 2 1 1 -1 -1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章