2012-12-11 55 views
24

我有一個Thymeleaf模板代碼到格式日期。在返回的對象中有多少次該日期將是null。在這種情況下,在Thymeleaf中檢查null的最佳方法是什麼?目前,該模板拋出以下錯誤:Thymeleaf - 格式化時檢查NULL的最佳做法(即日期)

Caused by: java.lang.IllegalArgumentException: Cannot apply format on null 
    at org.thymeleaf.util.Validate.notNull(Validate.java:37) 
    at org.thymeleaf.util.DateUtils.format(DateUtils.java:182) 
    at org.thymeleaf.expression.Dates.format(Dates.java:164) 

回答

5

您可以使用thymeleafs對象的實用工具類Objects或者將它傳遞給模板之前驗證的對象。

我更喜歡預驗證,因爲您通常不想在模板中進行破解。也就是說,您可以將數據從視圖中鬆散耦合起來。

+1

我用這種方法去,雖然我不一定看到模板處理空值一劈本身,但它確實渣土推出該模板,並可以打破觀點及其數據的擔憂。 – user1812806

50

您還可以使用條件表達式的對象,因此,如果您對象只應用的格式方法不爲空:th:text="${myDate} ? ${#dates.format(myDate,...)}"

注意存在的表達沒有「else」部分的上方,並且在這種情況下,表達式將簡單地返回null(使得th:text屬性不寫任何內容)。 (需要聲明的StackOverflow的:我thymeleaf的作者)

+1

感謝您的回覆。我實際上得到了這種方法,但決定驗證服務器端的值,以使模板更具可讀性和「乾淨」。感謝您的迴應。 – user1812806

+0

我認爲這在Thymeleaf中實際上是一個** bug **。 'dates.format'和'temporals.format'只需在輸入值爲null的情況下返回null即可。這是非常討厭的添加這些樣板'if's無處不在::( –

+0

我有類似的問題,因爲我的數據對象不是空的。它給了我未格式化的日期,如果我使用此代碼「 06/23/2013「但是當我使用 06/23/2013它給我null ...任何想法@Daniel Femandez –