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?

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>

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.


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


16

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

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

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>

5
   <p data-th-text ="${#strings.defaultString(yourNullable,'defaultValueIfYourValueIsNull')}"></p>


2

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

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

1

ich benutze

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

0

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

<td th:text="${ins.eValue!=null}? ${ins.eValue}:'NA'" />
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.