Как сделать if-else в Тимелеафе?

Каков наилучший способ сделать простой if-else в Тимелеафе?

Я хочу достичь в Тимелеафе того же эффекта, что и

  

Hello!

Something else

в JSTL.

Что я догадался до сих пор:

 

Hello!

Something else

Я не хочу дважды оценивать potentially_complex_expression выражение. Вот почему я ввел condition локальной переменной.

Тем не менее мне не нравится использовать оба th:if="${condition} и th:if="${condition} th:unless="${condition}" .

Важно то, что я использую 2 разных html-тега: скажем, h2 и span .

Можете ли вы предложить лучший способ достичь этого?

Thymeleaf имеет эквивалент select и : атрибуты th:switch и th:case введенные в Thymeleaf 2.0.

Они работают так, как вы ожидали, используя * для случая по умолчанию:

 

User is an administrator

User is a manager

User is some other thing

См. http://www.thymeleaf.org/whatsnew20.html#swit для быстрого объяснения синтаксиса (или учебных пособий тимелеафа).

Отказ от ответственности, в соответствии с правилами StackOverflow: я автор тимелеафа.

Я попробовал этот код, чтобы узнать, зарегистрирован ли пользователь или анонимен. Я использовал th:if и th:unless условные выражения. Довольно простой способ сделать это.

  
Welcome, Guest
Hi, User

Я хотел бы поделиться своим примером, связанным с безопасностью, в дополнение к Даниэлю Фернандесу.

 
User is not logged in Logged in user Should never happen, but who knows...

Вот комплексное выражение со смешанными объектами утилиты «аутентификации» и «авторизации», которое создает результат «true / false» для кода шаблона тимелеафа.

Утилиты «аутентификации» и «авторизации» были получены из библиотеки тирмелафа extras springsecurity3 . Когда объект аутентификации недоступен ИЛИ authorization.expression (‘isAuthenticated ()’) оценивается как ‘false’, выражение возвращает $ {false}, в противном случае $ {true}.

Вы можете использовать

 If-then-else: (if) ? (then) : (else) 

Пример:

 'User is of type ' + (${user.isAdmin()} ? 'Administrator' : (${user.type} ?: 'Unknown')) 

Это может быть полезно для новых людей, задающих один и тот же вопрос.

В более простом случае (когда tags html совпадают):

 

/h2>

Другое решение – вы можете использовать локальную переменную:

 

Hello!

Something else

Подробнее о локальных переменных:
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables

Другое решение заключается в not чтобы не использовать противоположное отрицание:

 

Hello!

Something else

Как поясняется в документации , это то же самое, что использовать th:unless . Как объяснили другие ответы:

Кроме того, th:if имеет обратный атрибут, th:if , который мы могли бы использовать в предыдущем примере вместо использования не внутри выражения OGNL

Использование также not работает, но IMHO более читаемо использовать th:unless вместо того, чтобы отрицать условие с not .

 

User is an administrator

User is a manager

User is some other thing

Hello!

Something else
Давайте будем гением компьютера.