freemarker 經常使用內置函數html
1。在模板裏邊 變量引用使用:
${a}, 若是給<#macro aa tmp=a > 這不須要 $,java
能夠給模板注入一些自定義的函數 ,這個比較經常使用.
=======================
接下來 將網上一些 內置函數 記錄下來node
1、Sequence的內置函數web
1.sequence?first 返回sequence的第一個值。api
2.sequence?last 返回sequence的最後一個值。函數
3.sequence?reverse 將sequence的現有順序反轉,即倒序排序編碼
4.sequence?size 返回sequence的大小url
5.sequence?sort 將sequence中的對象轉化爲字符串後順序排序spa
6.sequence?sort_by(value) 按sequence中對象的屬性value進行排序orm
注意:Sequence不能爲null
2、Hash的內置函數
1.hash?keys 返回hash裏的全部key,返回結果爲sequence
2.hash?values 返回hash裏的全部value,返回結果爲sequence
3、操做字符串函數
1.substring(start,end)從一個字符串中截取子串
start:截取子串開始的索引,start必須大於等於0,小於等於end
end: 截取子串的長度,end必須大於等於0,小於等於字符串長度,若是省略該參數,默認爲字符串長度。
2.cap_first 將字符串中的第一個單詞的首字母變爲大寫。
3.uncap_first將字符串中的第一個單詞的首字母變爲小寫。
4.capitalize將字符串中的全部單詞的首字母變爲大寫
5.date,time,datetime將字符串轉換爲日期
注意:若是指定的字符串格式不正確將引起錯誤
6.ends_with 判斷某個字符串是否由某個子串結尾,返回布爾值
注意:布爾值必須轉換爲字符串才能輸出
7.html 用於將字符串中的<、>、&和"替換爲對應得<>":&
8.index_of(substring,start)在字符串中查找某個子串,返回找到子串的第一個字符的索引,若是沒有找到子串,則返回-1。
Start參數用於指定從字符串的那個索引處開始搜索,start爲數字值。
若是start大於字符串長度,則start取值等於字符串長度,若是start小於0,則start取值爲0。
9.length返回字符串的長度
10.lower_case將字符串轉爲小寫
11.upper_case將字符串轉爲大寫
12.contains 判斷字符中是否包含某個子串。返回布爾值
注意:布爾值必須轉換爲字符串才能輸出
13.number將字符串轉換爲數字
14.replace用於將字符串中的一部分從左到右替換爲另外的字符串。
15.split使用指定的分隔符將一個字符串拆分爲一組字符串
16.trim 刪除字符串首尾空格
4、操做數字
1.c 用於將數字轉換爲字符串
2.string用於將數字轉換爲字符串
Freemarker中預訂義了三種數字格式:number,currency(貨幣)和percent(百分比)其中number爲默認的數字格式轉換
五操做布爾值
string 用於將布爾值轉換爲字符串輸出
true轉爲"true",false轉換爲"false"
foo?string("yes","no")若是布爾值是true,那麼返回"yes",不然返回no
<#assign x = "aa"/>
<#if x=="aa">
x is aa
<#else>
x not aa
</#if>
遍歷 list map
<#list somelist as item>
${item}
//若是是bean
${item.title}
</#list>
判斷list的長度
<#if somlist?size>0>
</#if>
遍歷map
<#list mapObj?keys as k>
<#assign item = mapObj[k]>
//or <#assign item = mapObj.get(k)>
${item.title}
</#list>
防止null 值 黃色警告頁面
${(item.title)!"一些默認值"}
freemarker 是能夠調用java 裏面的方法的
如
myList 是一個list
${myList.size()}
將輸出list 的長度
freemarker 大於 小於 大於等於 小於等於
<#if x gt 1> "gt" 大於
</#if>
freemarker 經常使用內置函數的使用方法
在咱們應用Freemarker過程當中,常常會操做例如字符串,數字,集合等,卻不清楚Freemrker有沒有相似於Java同樣有相關的類及方法。在本文當中,我將向你們詳細的介紹Freemarke的內置函數及用法,以便能幫助你們更熟練的應用Freemarker完成項目開發。
1、 Sequence的內置函數
1. sequence?first 返回sequence的第一個值。
2. sequence?last 返回sequence的最後一個值。
3. sequence?reverse 將sequence的現有順序反轉,即倒序排序
4. sequence?size 返回sequence的大小
5. sequence?sort 將sequence中的對象轉化爲字符串後順序排序
6. sequence?sort_by(value) 按sequence中對象的屬性value進行排序
注意:Sequence不能爲null。以上方法在個人另外一篇博客Freemarker中如何遍歷List有詳細的應用,感興趣的朋友能夠參考。
2、 Hash的內置函數
1. hash?keys 返回hash裏的全部key,返回結果爲sequence
2. hash?values 返回hash裏的全部value,返回結果爲sequence
例如:
<#assign user={「name」:「hailang」, 「sex」:「man」}>
<#assign keys=user?keys>
<#list keys as key>
${key}=${user[key]}
</#list>
3、 操做字符串函數
1. substring(start,end)從一個字符串中截取子串
start:截取子串開始的索引,start必須大於等於0,小於等於end
end: 截取子串的長度,end必須大於等於0,小於等於字符串長度,若是省略該參數,默認爲字符串長度。
例子:
${‘str’?substring(0)}à結果爲str
${‘str’?substring(1)}à結果爲tr
${‘str’?substring(2)}à結果爲r
${‘str’?substring(3)}à結果爲
${‘str’?substring(0,0)}à結果爲
${‘str’?substring(0,1)}à結果爲s
${‘str’?substring(0,2)}à結果爲st
${‘str’?substring(0,3)}à結果爲str
2. cap_first 將字符串中的第一個單詞的首字母變爲大寫。
${‘str’?cap_first}à結果爲Str
3. uncap_first將字符串中的第一個單詞的首字母變爲小寫。
${‘Str’?cap_first}à結果爲str
4. capitalize將字符串中的全部單詞的首字母變爲大寫
${‘str’? capitalize}à結果爲STR
5. date,time,datetime將字符串轉換爲日期
例如:
<#assign date1=」2009-10-12」?date(「yyyy-MM-dd」)>
<#assign date2=」9:28:20」?time(「HH:mm:ss」)>
<#assign date3=」 2009-10-12 9:28:20」?time(「HH:mm:ss」)>
${date1}à結果爲2009-10-12
${date2}à結果爲9:28:20
${date3}à結果爲2009-10-12 9:28:20
注意:若是指定的字符串格式不正確將引起錯誤。
6. ends_with 判斷某個字符串是否由某個子串結尾,返回布爾值。
${「string」?ends_with(「ing」)?string} 返回結果爲true
注意:布爾值必須轉換爲字符串才能輸出
7. html 用於將字符串中的<、>、&和「替換爲對應得<>":&
8. index_of(substring,start)在字符串中查找某個子串,返回找到子串的第一個字符的索引,若是沒有找到子串,則返回-1。
Start參數用於指定從字符串的那個索引處開始搜索,start爲數字值。
若是start大於字符串長度,則start取值等於字符串長度,若是start小於0, 則start取值爲0。
${「string」?index_of(「in」) à結果爲3
${「string」?index_of(「ab」) à結果爲-1
9. length返回字符串的長度 ${「string」?length}à結果爲6
10. lower_case將字符串轉爲小寫
${「STRING」?lower_case}à結果爲string
11. upper_case將字符串轉爲大寫
${「string」?upper_case}à結果爲STRING
12. contains 判斷字符中是否包含某個子串。返回布爾值
${「string」?contains(「ing」)?string} à結果爲true
注意:布爾值必須轉換爲字符串才能輸出
13. number將字符串轉換爲數字
${「111.11」?number}à結果爲111.11
14. replace用於將字符串中的一部分從左到右替換爲另外的字符串。
${「strabg」?replace(「ab」,」in」)} à結果爲string
15. split使用指定的分隔符將一個字符串拆分爲一組字符串
<#list 「This|is|split」?split(「|」) as s>
${s}
</#list>
結果爲:
This
is
split
16. trim 刪除字符串首尾空格 ${「 String 」?trim} à結果爲String
4、 操做數字
1. c 用於將數字轉換爲字符串
${123?c} à結果爲123
2. string用於將數字轉換爲字符串
Freemarker中預訂義了三種數字格式:number,currency(貨幣)和percent(百分比)其中number爲默認的數字格式轉換
例如:
<#assign tempNum=20>
${tempNum}
${tempNum?string.number}或${tempNum?string(「number」)} à結果爲20
${tempNum?string.currency}或${tempNum?string(「currency」)} à結果爲¥20.00
${tempNum?string. percent}或${tempNum?string(「percent」)} à結果爲2,000%
5、 操做布爾值
string 用於將布爾值轉換爲字符串輸出
true轉爲「true」,false轉換爲「false」
foo?string(「yes」,」no」)若是布爾值是true,那麼返回「yes」,不然返回no
freemarker List的遍歷
Freemarker中如何遍歷List摘要:在Freemarker應用中常常會遍歷List獲取須要的數據,
並對須要的數據進行排序加工後呈現給用戶。那麼在Freemarker中如何遍歷List,
並對List中數據進行適當的排序呢?
經過下文的介紹,相信您必定會找到答案。
1、 Freemarker中list指令簡單介紹
要想在Freemarker中遍歷list,必須經過使用list指令,即<#list sequence as item>…</#list>
sequence是集合(collection)的表達式,item是循環變量的名字,不能是表達式。
當在遍歷sequence時,會將遍歷變量的值保存到item中。
舉個例子說明吧:
<#list userList as user>
…
</#list>
userList中封裝了不少個User對象,咱們在遍歷userList時候,會將遍歷的User對象的值,保存到上述的user變量中。
那麼在取值時,咱們能夠經過${user.userName }來獲取User對象的userName屬性值。
List指令還隱含了兩個循環變量:
item_index:當前迭代項在全部迭代項中的位置,是數字值。
item_has_next:用於判斷當前迭代項是不是全部迭代項中的最後一項。
注意:在使用上述兩個循環變量時,必定要將item換成你本身定義的循環變量名,item其實就是前綴罷了。
例如,若是你使用<# list list as l>..</#list>定義,那麼就要使用l_index,l_has_next。
在循環過程當中,若是您想跳出循環,那麼可使用結合break指令,即<#break>來完成。
2、 Freemarker中對List進行排序
一般咱們的排序操做都是經過DAO層來實現的,若是咱們想隨時更改咱們的排序,那麼就必須修改咱們的DAO層代碼,
確實不方便。但Freemarker爲咱們提供了這樣的排序方法,解決了這個問題。
1. sort升序排序函數
sort對序列(sequence)進行排序,要求序列中的變量必須是:字符串(按首字母排序),數字,日期值。
<#list list?sort as l>…</#list>
2. sort_by函數
sort_by有一個參數,該參數用於指定想要排序的子變量,排序是按照變量對應的值進行排序,如:
<#list userList?sort_by(「age」) as user>…</#list>
age是User對象的屬性,排序是按age的值進行的。
3. reverse降序排序函數
<#list list? reverse as l>…</#list>
reverse使用同sort相同。reverse還能夠同sort_by一塊兒使用
如:想讓用戶按年齡降序排序,那麼能夠這個樣寫<#list userList?sort_by(「age」)?reverse as user>…</#list>
"_index"是FreeMarker中對於循環索引變量的命名約定。
經過「迭代變量名_index」便可訪問當前循環索引。
相似的循環狀態訪問約定還有「迭代變量名_has_next」,可經過這個循環狀態屬性判斷是否還有後繼循環。 因不少時候要用到「序號」、「索引」之類的東西,而FreeMarker恰好本身帶有,但不少人還並不知道它的妙用。所以就從Spring開發指南摘錄下來。 這樣能夠避免另申請一個變量,而後每次循環體又對它+1了。 不知道是否提到過這個。 <#list subDir as d>
<input type="checkbox" name="ids" value="file-${d_index}"/>
</#list>
FreeMarker 基礎知識 表達式(引用)
表達式是FreeMarker的核心功能,FreeMarker中的插值支持多種表達式。1、直接指定值
直接指定值能夠是字符串、數值、布爾值、集合及Map對象。
1. 字符串
直接指定字符串值使用單引號或雙引號限定。字符串中可使用轉義字符」\"。若是字符串內有大量的特殊字符,則能夠在引號的前面加上一個字母r,則字符串內的全部字符都將直接輸出。2. 數值
數值能夠直接輸入,不須要引號。FreeMarker不支持科學計數法。3. 布爾值
直接使用true或false,不使用引號。4. 集合
集合用中括號包括,集合元素之間用逗號分隔。
使用數字範圍也能夠表示一個數字集合,如1..5等同於集合[1, 2, 3, 4, 5];一樣也能夠用5..1來表示[5, 4, 3, 2, 1]。5. Map對象
Map對象使用花括號包括,Map中的key-value對之間用冒號分隔,多組key-value對之間用逗號分隔。
注意:Map對象的key和value都是表達式,但key必須是字符串。2、輸出變量值
FreeMarker的表達式輸出變量時,這些變量能夠是頂層變量,也能夠是Map對象的變量,還能夠是集合中的變量,並可使用點(.)語法來訪問Java對象的屬性。1. 頂層變量
所謂頂層變量就是直接放在數據模型中的值。輸出時直接用${variableName}便可。2. 輸出集合元素
能夠根據集合元素的索引來輸出集合元素,索引用中括號包括。如: 輸出[「1」, 「2」, 「3」]這個名爲number的集合,能夠用${number[0]}來輸出第一個數字。FreeMarker還支持用number[1..2]來表示原集合的子集合[「2」, 「3」]。3. 輸出Map元素
對於JavaBean實例,FreeMarker同樣把它看做屬性爲key,屬性值爲value的Map對象。
輸出Map對象時,可使用點語法或中括號語法,以下面的幾種寫法的效果是同樣的:
book.author.name
book.author["name"]
book["author"].name
book["author"]["name"]
使用點語法時,變量名字有和頂層變量同樣的限制,但中括號語法沒有任何限制。3、字符串操做
1. 字符串鏈接
字符串鏈接有兩種語法:
(1) 使用${..}或#{..}在字符串常量內插入表達式的值;
(2) 直接使用鏈接運算符「+」鏈接字符串。
如,下面兩種寫法等效:
${"Hello, ${user}"}
${"Hello, " + user + "!"}
有一點須要注意: ${..}只能用於文本部分做爲插值輸出,而不能用於比較等其餘用途,如:
<#if ${isBig}>Wow!</#if>
<#if "${isBig}">Wow!</#if>
應該寫成:
<#if isBig>Wow!</#if> 2. 截取子串
截取子串能夠根據字符串的索引來進行,若是指定一個索引值,則取得字符串該索引處的字符;若是指定兩個索引值,則截取兩個索引中間的字符串子串。如:
<#assign number="01234">
${number[0]} <#-- 輸出字符0 -->
${number[0..3]} <#-- 輸出子串「0123」 -->4、集合鏈接操做
鏈接集合的運算符爲「+」5、Map鏈接操做
Map鏈接操做的運算符爲「+」6、算術運算符
FreeMarker表達式中支持「+」、「-」、「*」、「/」、「%」運算符。7、比較運算符
表達式中支持的比較運算符有以下幾種:
1. =(或者==): 判斷兩個值是否相等;
2. !=: 判斷兩個值是否不相等;
注: =和!=能夠用做字符串、數值和日期的比較,但兩邊的數據類型必須相同。並且FreeMarker的比較是精確比較,不會忽略大小寫及空格。
3. >(或者gt): 大於
4. >=(或者gte): 大於等於
5. <(或者lt): 小於
6. <=(或者lte): 小於等於
注: 上面這些比較運算符能夠用於數字和日期,但不能用於字符串。大部分時候,使用gt比>有更好的效果,由於FreeMarker會把>解釋成標籤的結束字符。可使用括號來避免這種狀況,如:<#if (x>y)>。8、邏輯運算符
1. &&: 邏輯與;
2. ||: 邏輯或;
3. !: 邏輯非
邏輯運算符只能用於布爾值。9、內建函數
FreeMarker提供了一些內建函數來轉換輸出,能夠在任何變量後緊跟?,?後緊跟內建函數,就能夠經過內建函數來轉換輸出變量。字符串相關經常使用的內建函數:
1. html: 對字符串進行HTML編碼;
2. cap_first: 使字符串第一個字母大寫;
3. lower_case: 將字符串轉成小寫;
4. upper_case: 將字符串轉成大寫;集合相關經常使用的內建函數:
1. size: 得到集合中元素的個數;數字值相關經常使用的內建函數:
1. int: 取得數字的整數部分。10、空值處理運算符
FreeMarker的變量必須賦值,不然就會拋出異常。而對於FreeMarker來講,null值和不存在的變量是徹底同樣的,由於FreeMarker沒法理解null值。
FreeMarker提供兩個運算符來避免空值:
1. !: 指定缺失變量的默認值;
2. ??:判斷變量是否存在。
!運算符有兩種用法:variable!或variable!defaultValue。第一種用法不給變量指定默認值,代表默認值是空字符串、長度爲0的集合、或長度爲0的Map對象。
使用!運算符指定默認值並不要求默認值的類型和變量類型相同。
??運算符返回布爾值,如:variable??,若是變量存在,返回true,不然返回false。
freemarker 的內建函數 contains 的使用 freemarker 的內建函數 contains 的使用 關鍵字: freemarker contains freemarker 的內建函數 contains 的使用: <#if employee.departments?contains(department)>checked="checked"</#if> 其中departments是一個集合,而department是departments集合裏的一個元素。contains函數能夠判斷出,元素 department是否存在於集合departments裏,最終返回一個Booleancontains是freemarker的內建函數,即自帶的 。 FreeMarker 的內建函數有: chunk, is_date, last, root, j_string, round, contains, is_hash, long, float, ends_with, namespace, matches, time, values, seq_last_index_of, uncap_first, byte, substring, is_transform, web_safe, groups, seq_contains, is_macro, index_of, word_list, int, is_method, eval, parent, xml, number, capitalize, if_exists, rtf, node_type, double, is_directive, url, size, default, floor, ceiling, is_boolean, split, node_name, is_enumerable, seq_index_of, is_sequence, sort, is_node, sort_by, left_pad, cap_first, interpret, children, node_namespace, chop_linebreak, date, short, last_index_of, is_collection, ancestors, length, trim, datetime, is_string, reverse, c, keys, upper_case, js_string, has_content, right_pad, replace, is_hash_ex, new, is_number, lower_case, is_indexable, string, exists, html, first