freemarker(二) 經常使用內置函數


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 用於將字符串中的<、>、&和"替換爲對應得<>&quot:&amp

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 用於將字符串中的<、>、&和「替換爲對應得&lt;&gt;&quot:&amp

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

相關文章
相關標籤/搜索