2012-12-11 8 views
24

Ich habe einen Thymeleaf Vorlage Code zu formatieren Sie ein Datum. Es gibt Zeiten, wenn dieses Datum null in dem zurückgegebenen Objekt sein wird. Wie kann man in Thymeleaf in dieser Situation am besten auf null überprüfen? Derzeit wird die Vorlage der folgenden Fehler zu werfen:Thymoleaf - Best Practice für die Überprüfung auf Null bei der Formatierung (z. B. Daten)

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) 

Antwort

5

können Sie entweder thymeleafs Objekte Utility-Klasse Objects oder das Objekt validieren, bevor es auf die Vorlage übergeben.

Ich bevorzuge die Prävalidierung, da Sie normalerweise nicht in Ihrer Vorlage herumhacken möchten. Auf diese Weise halten Sie Ihre Daten lose mit der Ansicht verbunden.

+1

ich mit diesem Ansatz ging, obwohl ich nicht unbedingt einen Nullwert in der Vorlage per se einen Hack sehen Handhabung, aber es tut Dreck herauf die Schablone und bricht wohl die Trennung der Interessen für Ansichten und ihre Daten. – user1812806

50

Sie auch einen bedingten Ausdruck auf Ihrem Objekt verwenden kann, so dass die Formatierung Methode nur, wenn Sie nicht null Objekt angewandt wird: th:text="${myDate} ? ${#dates.format(myDate,...)}"

Hinweis dort im Ausdruck oben nicht „else“ Teil ist, und in In diesem Fall wird der Ausdruck einfach null zurückgeben (wodurch das th:text Attribut nichts geschrieben wird).

(Disclaimer von Stackoverflow erforderlich: Ich bin der Autor des thymeleaf)

+1

Danke für die Antwort. Ich habe diesen Ansatz tatsächlich funktioniert, entschied mich aber, die Werte auf der Serverseite zu validieren, um die Vorlagen lesbarer und "sauberer" zu halten. Danke für die Antwort. – user1812806

+0

Ich denke, das ist eigentlich ein ** Fehler ** in Thymeleaf. "Dates.format" und "temporals.format" sollten einfach "null" zurückgeben, wenn der Eingabewert "null" ist. Es ist sehr ärgerlich, diese Boilerplate 'wenn's überall hinzuzufügen :( –

+0

Ich habe ähnliches Problem, wo mein Datenobjekt nicht null ist. Es gibt mir ein unformatiertes Datum, wenn ich diesen Code verwende" 23.06.2013 "aber wenn ich 06/23/2013 es gibt mir null ... keine Ahnung @Daniel Femandez –