Freemarker學習記錄

學習Freemarker,把其中比較容易忘記的點記錄下: python


<h1>Welcome ${user!"Anonymous"}!</h1>
當user從數據模型中丟失或爲空時,模板將會將user的值表示爲字符串"Anonymous"。


<#if user??><h1>Welcome ${user}!</h1></#if>
變量名後面經過放置??來詢問 FreeMarker 一個變量是否存在。


(animals.python.price)!0。這種狀況下當animals或python不存在時表達式的結果仍然是0。對於??也是一樣用來的處理這種邏輯的:能夠animals.python.price??對比(animals.python.price)??來看。 shell

原生字符串
${r"${foo}"}         結果${foo} 
${r"C:\foo\bar"}   結果C:\foo\bar
ide

使用>=和>的時候有一點小問題。FreeMarker 解釋>的時候能夠把它看成 FTL 標籤的結束符。爲了不這種問題,不得不將表達式放到括號內:<#if (x > y)>,或者能夠在比較關係處使用&gt;和&lt;:<#if x &gt; y>。 學習

模板語言中沒有 null這個概念。好比有一個 bean,bean 中有一個 maidenName屬性,對於模板而言(假設你沒有配置FreeMarker 來使用一些極端的對象包裝),這個屬性的值是 null,和不存在這個屬性的狀況是一致的。 spa

一個常犯的錯誤是在不能使用插值的地方使用了它。典型的錯誤就是<#if ${isBig}>Wow!</#if>,這是語法上的錯誤。只要寫爲<#if isBig>Wow!</#if>就對了,並且<#if "${isBig}">Wow!</#if>也是錯誤的,由於這樣參數就是字符串類型了,可是 if 指令的參數要求是布爾值,因此運行時就會發生錯誤。 code


<#macro greet person> 
  <font size="+2">Hello ${person}!</font> 
</#macro>
那麼就能夠這樣來使用這個宏
<@greet person="Fred"/> and <@greet person="Batman"/>
這和 HTML 的語法是很類似的,它會打印出:
<font size="+2">Hello Fred!</font> and <font size="+2">Hello Batman!</font>
自定義指令能夠有多個參數。以下所示,再添加一個新的參數 color: 
<#macro greet person color> 
  <font size="+2" color="${color}">Hello ${person}!</font> 
</#macro>

那麼,這個宏就能夠這樣來使用( 參數的順序不重要):<@greet person="Fred" color="black"/> xml


<#macro do_thrice> 
  <#nested 1> 
  <#nested 2> 
  <#nested 3> 
</#macro> 
<@do_thrice ; x> <#-- 用戶自定義指令 使用";"代替"as" --> 
  ${x} Anything. 
</@do_thrice>
將會輸出:
1 Anything. 
2 Anything. 
3 Anything.


使用另外一個模板文件中定義的宏,import 指令來代替 include
定義:
對象

<#macro copyright date> 
  <p>Copyright (C) ${date} Julia Smith. All rights reserved.</p> 
</#macro> 
<#assign mail = "jsmith@acme.com">
使用:
<#import "/lib/my_test.ftl" as my>  
<#-- 被稱爲"my"的哈希表就會是那個"大門" --> 
<@my.copyright date="1999-2002"/> 
${my.mail}
要注意它是怎麼訪問爲 lib/my_test.ftl 建立的命名空間中的變量的,經過新建立的哈希表,my。那麼將會打印出: <p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.</p>  jsmith@acme.com  若是在主命名空間中有一個變量,名爲 mail 或 copyright,那麼就不會引發混亂了,由於兩個模 板使用了不一樣 的命名空間 。
相關文章
相關標籤/搜索