測試代碼
@Test public void test05(){ try { freemakerUtil.fprint(root, "05.ftl",fn+"05.html"); } catch (Exception e) { e.printStackTrace(); } }
ftl模版文件
<#--加個感嘆號可以解決為空的問題--> ${(emp.group)!} <#--加上括號,感嘆號解決對象導航為空的問題--> ${(emp.group.name)!"group為空或者name為空"} <br/> <#--感嘆號還可以解決未定義為空的問題--> ${(a.b)!("a.b未定義")} <br/> <#--(a.b)?? 判斷a.b是否為空--> <#if (a.b)??> 不為空 <#else> 為空 </#if> <br/> ${(a.b)???string}
效果
原文檔的解釋如下:
在不是頂層變量時,默認值操作符可以有兩種使用方式:
product.color!"red"
如果是這樣的寫法,那么在 product 中,當 color 不存在時(返回 ”red” )將會
被處理, 但是如果連 produce 都不存在時將不會處理。 也就是說這樣寫時變量 product
必須存在,否則模板就會報錯。
(product.color)!"red"
這時,如果當不存在時也會被處理,那就是說如果 product 不存在或者 product
存在而 color 不存在,都能顯示默認值 ”red” 而不會報錯。本例和上例寫法的重要區別
在於用括號時,就允許其中表達式的任意部分可以未定義。