Verwenden von Thymeleaf, wenn der Wert null ist

78

Ich habe einige Werte in meiner Datenbank, die null sein können, wenn sie noch nicht eingegeben wurden.

Wenn ich jedoch Thymeleaf in meinem HTML-Code verwende, tritt beim Parsen von Nullwerten ein Fehler auf.

Gibt es eine Möglichkeit, damit umzugehen?

serkan
quelle

Antworten:

130

Der kürzeste Weg ist die Verwendung von '?' Operator. Wenn Sie eine Benutzerentität mit eingebetteter Adressentität haben, um auf Felder der Adressentität zuzugreifen und diese zu drucken, wenn die Adresse nicht null ist, wird hier eine leere Spalte angezeigt:

<td th:text="${user?.address?.city}"></td>
Orest
quelle
7
Der ?.Operator wird gemäß den Spring Expression Language-Dokumenten als "sichere Navigation" bezeichnet .
Rdguam
Während die obige Syntax in Spring Boot 2.0.5, das mit Thymeleaf 3.0.9 geliefert wird, als gültig akzeptiert wird, tut sie zumindest für mich nicht das, was hier behauptet wird. Ist das eine spezielle Funktion, die Sie aktivieren müssen?
Keyboardsamurai
Diese Funktion stammt nicht aus dem Blatt, sondern aus dem Frühjahr
deFreitas
2
mit? In einem numerischen Feld mit dem Wert 0 wird ebenfalls false ausgegeben. Daher müssten Sie die vollständige! = Null-Bedingung für Zahlenfelder verwenden.
Dave
Dies ist die beste Antwort, da dies prägnanter ist
Peterchaula
62

Sicher gibt es. Sie können beispielsweise die bedingten Ausdrücke verwenden . Zum Beispiel:

<span th:text="${someObject.someProperty != null} ? ${someObject.someProperty} : 'null value!'">someValue</span>

Sie können sogar den Ausdruck "else" weglassen:

<span th:text="${someObject.someProperty != null} ? ${someObject.someProperty}">someValue</span>

Sie können sich auch den Elvis-Operator ansehen , um Standardwerte anzuzeigen.

tduchateau
quelle
Edit:Die ${...} für die if-Bedingung wurde hinzugefügt , da Sie sie verpasst haben. +1 für den ternären Ausdruck in th:text.
Glücklicher
Könnten Sie bitte erklären, warum mehrere $ {...} benötigt werden? Was ist, wenn ich beiden Alternativen z. B. 'Foo:' voranstellen möchte? Müsste ich es zweimal in den Alternativen angeben?
Lilalinux
Ihre Antwort sollte als Lösung zugelassen werden. Vielen Dank.
Russellhoff
17

Dies kann auch mit dem elvis-Operator behandelt ?: werden, der einen Standardwert hinzufügt, wenn das Feld null ist:

<span th:text="${object.property} ?: 'default value'"></span>
Juan Carlos Mendoza
quelle
16

Sie können 'th: if' zusammen mit 'th: text' verwenden.

<span th:if="${someObject.someProperty != null}" th:text="${someObject.someProperty}">someValue</span>
Roberto
quelle
5
Keine Notwendigkeit für != nullnur <span th:if="${someObject.someProperty}" ...ist genug
deFreitas
7

Sie haben beim Erstellen die doppelte Überprüfung durchgeführt

${someObject.someProperty != null} ? ${someObject.someProperty}

Sie sollten es sauber und einfach wie unten machen.

<td th:text="${someObject.someProperty} ? ${someObject.someProperty} : 'null value!'"></td>
Ah Hiang
quelle
5
   <p data-th-text ="${#strings.defaultString(yourNullable,'defaultValueIfYourValueIsNull')}"></p>
Vazgen Torosyan
quelle
2

Sie können diese Lösung verwenden, die für mich funktioniert

<span th:text="${#objects.nullSafe(doctor?.cabinet?.name,'')}"></span>
SAAD BELEFQIH
quelle
1

ich benutze

<div th:text ="${variable != null} ? (${variable != ''} ? ${variable} : 'empty string message') : 'null message' "></div>
Palash
quelle
0

Der kürzeste Weg! Es funktioniert für mich, wobei NA mein Standardwert ist.

<td th:text="${ins.eValue!=null}? ${ins.eValue}:'NA'" />
Nitish
quelle