Використання Thymeleaf, коли значення дорівнює нулю


80

У моїй базі даних є деякі значення, які можуть бути нульовими, якщо вони ще не були введені.

Але коли я використовую Thymeleaf у своєму html, це видає помилку при аналізі нульових значень.

Чи є спосіб впоратися з цим?

Відповіді:


131

Найкоротший спосіб - використовувати "?" оператора. Якщо у вас є сутність користувача із вбудованою суттю Address, щоб отримати доступ до полів сутності Address і роздрукувати їх, якщо адреса не є нульовою, інакше тут буде пустий стовпець:

<td th:text="${user?.address?.city}"></td>

7
Відповідно ?.до документів Spring Expression Language оператор називається оператором "безпечної навігації" .
рдгуам

Хоча вищезазначений синтаксис прийнятий як дійсний у spring boot 2.0.5, який постачається з thymeleaf 3.0.9, принаймні для мене він не робить того, що тут заявлено. Це особлива функція, яку потрібно ввімкнути?
keyboardsamurai

Ця особливість не від чебрецю, а від весни
deFreitas

2
використання? для числового поля, що дорівнює 0, також буде видавати помилку. Таким чином, вам потрібно буде використовувати умову full! = Null, що стосується числових полів.
Дейв

Це найкраща відповідь, оскільки це більш стисло
peterchaula

62

Звичайно, є. Наприклад, ви можете використовувати умовні вирази . Наприклад:

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

Ви навіть можете пропустити вираз "else":

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

Ви також можете заглянути в оператор Elvis, щоб відобразити значення за замовчуванням.


Edit:Додано ${...} умову if, оскільки ви її пропустили. +1 для потрійного виразу в th:text.
Пощастило

Не могли б ви пояснити, чому потрібно кілька {...} $? Що робити, якщо я хочу додати обидві альтернативи префіксу, наприклад, "Foo:". Чи потрібно було б вказувати це двічі всередині альтернатив?
lilalinux

Ваша відповідь повинна бути визнана як рішення. Дякую.
russellhoff

18

Це також можна обробити за допомогою оператора elvis, ?: який додасть значення за замовчуванням, коли поле буде нульовим:

<span th:text="${object.property} ?: 'default value'"></span>

1
Це, мабуть, найелегантніший спосіб відображення значень за замовчуванням у чебрецю. заслуговує на більшу кількість голосів!
membersound

17

Ви можете використовувати 'th: if' разом із 'th: text'

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

6
Не потрібно != nullлише " <span th:if="${someObject.someProperty}" ...достатньо"
deFreitas

7

Ви робили двічі перевірку під час створення

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

Ви повинні робити це чисто і просто, як показано нижче.

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



2

Ви можете використовувати це рішення, воно працює для мене

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

1

я використовую

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

0

Найкоротший шлях! це працює для мене, де NA - моє значення за замовчуванням.

<td th:text="${ins.eValue!=null}? ${ins.eValue}:'NA'" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.