FreeMarker慣用內置函數

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

<span style="color:#FF0000;">2、Hash的內置函數</span> 1.hash?keys 返回hash裏的全部key,返回結果爲sequence 2.hash?values 返回hash裏的全部value,返回結果爲sequence <span style="color:#FF0000;"> 3、操做字符串函數</span> 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 刪除字符串首尾空格 <span style="color:#FF0000;">4、操做數字</span> 1.c 用於將數字轉換爲字符串 2.string用於將數字轉換爲字符串 Freemarker中預訂義了三種數字格式:number,currency(貨幣)和percent(百分比)其中number爲默認的數字格式轉換 <span style="color:#FF0000;">五操做布爾值 </span> 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> <span style="color:#FF0000;">遍歷 list map</span> <#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> <span style="color:#FF0000;">freemarker 經常使用內置函數的使用方法 </span> 在咱們應用Freemarker過程當中,常常會操做例如字符串,數字,集合等,卻不清楚Freemrker有沒有相似於Java同樣有相關的類及方法。在本文當中,我將向你們詳細的介紹Freemarke的內置函數及用法,以便能幫助你們更熟練的應用Freemarker完成項目開發。 <span style="color:#FF0000;">1、 Sequence的內置函數</span> 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有詳細的應用,感興趣的朋友能夠參考。 <span style="color:#FF0000;">2、Hash的內置函數</span> 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> <span style="color:#FF0000;"> 3、 操做字符串函數</span> 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 <span style="color:#FF0000;">4、操做數字</span> 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% <span style="color:#FF0000;">5、 操做布爾值</span> string 用於將布爾值轉換爲字符串輸出 true轉爲「true」,false轉換爲「false」 foo?string(「yes」,」no」)若是布爾值是true,那麼返回「yes」,不然返回no <span style="color:#FF0000;">freemarker List的遍歷</span> Freemarker中如何遍歷List摘要:在Freemarker應用中常常會遍歷List獲取須要的數據, 並對須要的數據進行排序加工後呈現給用戶。那麼在Freemarker中如何遍歷List, 並對List中數據進行適當的排序呢? 經過下文的介紹,相信您必定會找到答案。 <span style="color:#FF0000;">1、 Freemarker中list指令簡單介紹</span> 要想在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>來完成。 <span style="color:#FF0000;">2、 Freemarker中對List進行排序</span> 一般咱們的排序操做都是經過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> <span style="color:#FF0000;">FreeMarker 基礎知識 表達式(引用)</span> 表達式是FreeMarker的核心功能,FreeMarker中的插值支持多種表達式。 <span style="color:#FF6666;">1、直接指定值</span> 直接指定值能夠是字符串、數值、布爾值、集合及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必須是字符串。 <span style="color:#FF6666;">2、輸出變量值</span> 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"] 使用點語法時,變量名字有和頂層變量同樣的限制,但中括號語法沒有任何限制。 <span style="color:#FF6666;">3、字符串操做</span> 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」 --> <span style="color:#FF6666;">4、集合鏈接操做</span>  鏈接集合的運算符爲「+」 <span style="color:#FF6666;">5、Map鏈接操做</span> Map鏈接操做的運算符爲「+」 <span style="color:#FF6666;">6、算術運算符</span> FreeMarker表達式中支持「+」、「-」、「*」、「/」、「%」運算符。 <span style="color:#FF6666;">7、比較運算符</span> 表達式中支持的比較運算符有以下幾種: 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提供兩個運算符來避免空值: <span style="color:#FF0000;">1. !: 指定缺失變量的默認值; 2. ??:判斷變量是否存在。</span> !運算符有兩種用法: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
相關文章
相關標籤/搜索