FreeMarker不能容忍引用不存在的變量,除非明確地告訴它當變量不存在時如何處理。這里介紹兩種典型的處理方法.
一個不存在的變量和一個是null的變量,對於FreeMarker來說是一樣的。
處理方法一:
不論在哪里引用變量,都可以指定一個默認值來避免變量丟失這種情況,通過在變量名后面跟着一個!和默認值。就像下面的例子,當user從數據模型中丟失時,模板將會將user的值表示為字符串”Anonymous”。(若user並沒有丟失,那么模板就會表現出”Anonymous”不存在一樣):
<h1>Welcome ${user!"Anonymous"}!</h1>
處理方法二:
當然也可以在變量名后面通過放置??來詢問FreeMarker一個變量是否存在。將它和if指令合並,那么如果user變量不存在的話將會忽略整個問候代碼段:
<#if user??><h1>Welcome ${user}!</h1></#if>
關於多級訪問的變量,比如animals.python.price,書寫代碼:animals.python.price!0,僅當animals.python存在而僅僅最后一個子變量price可能不存在(這種情況下我們假設價格是0)。如果animals或者python不存在,那么模板處理過程將會以“未定義的變量”錯誤而停止。為了防止這種情況的發生,可以這樣來書寫代碼(animals.python.price)!0。這種情況下當animals或python不存在時表達式的結果仍然是0。對於??也是同樣用來的處理這種邏輯的:animals.python.price??對比(animals.python.price)??來看。