Freemarker中的null判斷,小坑一枚
上次寫到,在Freemarker中日期轉換,可以提取成工具方法。主要是Freemarker對null的處理方式,非常坑爹。只要一個物件或物件的屬性為null,就報錯,雖然不影響介面顯示,但控制檯和日誌總是列印“錯誤資訊”,很是不爽。所以,想寫方法判斷物件是否為null,再做正確的顯示。
上次寫的2個Freemarker函式,實際過程中只用到了第1個,正常。
把int型別的日期轉換成字串
<#function number_to_ymdhms date>
<#if date != null>
<#setting datetime_format="yyyy-MM-dd hh:mm:ss"/>
<#return date?number_to_datetime/>
</#if>
<#return ""/>
</#function>
把date型別的日期轉換成字串
<#function date_to_ymdhms date>
<#if date != null>
<#return date?string('yyyy-MM-dd hh:mm:ss')/>
</#if>
<#return ""/>
</#function>
後來,專案中用到了第2個方法,但是日期沒有顯示出來,debug發現date不是null,這是為什麼呢?
最後確定,date != null 有問題。
結論:number型別(當然包number型別的日期),可以與null比較,即date!=null.
而物件型別,不能直接與null進行比較,應該用date?exists (複數) 。
date型別比較:
<#function date_to_ymdhms date>
<#if date?exists>
<#return date?string('yyyy-MM-dd hh:mm:ss')/>
</#if>
<#return ""/>
</#function>