Оптимальное использование if-else в Thymeleaf: советы и примеры

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Вы можете реализовать логику if-else в Thymeleaf, используя атрибут th:if для условиевмерного применения if, и th:else (или же отрицание с помощью th:if) для условиевмерного применения else. Осмотрите пример:

HTML
Скопировать код
<span th:if="${condition}" th:text="'Истина'"></span>
<span th:else th:text="'Ложь'"></span>

Cуществует и упрощённый способ с применением тернарного оператора:

HTML
Скопировать код
<span th:text="${condition} ? 'Истина' : 'Ложь'"></span>

Всё довольно просто и понятно, но давайте углубимся в детали.

Кинга Идем в IT: пошаговый план для смены профессии

Использование конструкций switch-case с помощью th:switch и th:case

Kогда вашей задачей является обработка множества условий, th:switch и th:case сделают это решение наиболее эффективным. Эти атрибуты проверяют условие только один раз и применяют это условие ко всему массиву случаев, исключая необходимость повторяемости th:if. Посмотрите пример ниже:

HTML
Скопировать код
<div th:switch="${user.role}">
  <p th:case="'admin'" th:text="'Пользователь — администратор.'"></p>
  <p th:case="'user'" th:text="'Пользователь — обычный пользователь.'"></p>
  <p th:case="*" th:text="'Роль не определена.'"></p>
</div>

Обратите внимание на символ *- он выступает в функции стандартного случая, который применяется, если остальные условия не выполнились.

Сведение к минимуму избыточности с помощью th:with

Если вы не хотите, чтобы одно и это же сложное выражение пересчитывалось многократно, воспользуйтесь атрибутом th:with. Он позволяет присвоить результат выражения локальной переменной, которая затем используется для дальнейших операций. Взгляните на следующий пример:

HTML
Скопировать код
<div th:with="userStatus=${session.user != null}">
  <div th:if="${userStatus}" th:text="'Добро пожаловать обратно, ' + ${session.user.name} + '!'"></div>
  <div th:unless="${userStatus}" th:text="'Приглашаем войти.'"></div>
</div>

Таким образом, вы можете сохранить значение и использовать его позже без необходимости повторного вычисления.

Визуализация

Обусловленная логика if-else в Thymeleaf может быть представлена как разветвление на перекрестке, каждое направление которого ведёт к определённому варианту:

    Городок Thymeleaf 🏘️
        /     \
🛣️ if-путь  else-путь 🛤️
    /            \
🏡 [истина]    [ложь] 🏭

Выбор if отведёт нас в частную сферу (🏡), где обитает "истина".
А else направит нас в промышленный район (🏭), где зародилась "ложь".

HTML
Скопировать код
<div th:if="${condition}">
    <!-- Загородная зона [истина] 🏡 -->
</div>
<div th:else>
    <!-- Промышленный квартал [ложь] 🏭 -->
</div>

Развивайтесь: грамотное программирование ближе, чем кажется! 🛤️🚦

Безопасные условные операторы с thymeleaf-extras-springsecurity5

При работе с Spring Security, Thymeleaf удивительно прост в интеграции с помощью thymeleaf-extras-springsecurity5, что помогает безопасно отражать контент, сообразуясь с состоянием аутентификации и авторизации:

HTML
Скопировать код
<div th:if="${#authorization.expr('hasRole(''ADMIN'')')}">
  <!-- Только для администраторов -->
</div>

Так вы можете контролировать не только то, вошёл ли пользователь успешно в систему, но и обладает ли он соответствующими правами доступа.

Адаптация мной отображаемого текста с помощью th:text

В том случае, если текст на веб-странице должен меняться в соответствии с проверенными условиями, th:text вам в этом поможет. Этот атрибут непревзойдённо работает с условными выражениями, помогая тексту вникать в динамику происходящего:

HTML
Скопировать код
<span th:text="${user.isAdmin()} ? 'Панель администратора' : 'Профиль пользователя'"></span>

Благодаря этому, текст будет адаптироваться к текущему состоянию: вот его чудеса в действии.

Персонализированный пользовательский опыт в реальных условиях

Особое внимание следует уделять созданию особого функционала для авторизованных пользователей, в отличие от неавторизованных. Вы могли бы подумать об этом, как о подборе меню для разных категорий посетителей в ресторане:

HTML
Скопировать код
<span th:if="${user.loggedIn}" th:text="'Выйти'"></span> <!-- Время прощаться -->
<span th:unless="${user.loggedIn}" th:text="'Войти или зарегистрироваться'"></span> <!-- Добро пожаловать на борт -->

Полезные материалы

  1. Урок: Thymeleaf + Spring — широкомасштабное руководство, посвящённое использованию Thymeleaf в тандеме со Spring, в том числе условных конструкций.
  2. Java Spring Boot: Как сделать index.html стартовой страницей моего приложения ("/")? — Обсуждение на StackOverflow о маршрутизации в Thymeleaf, включая вопросы условного рендеринга.
  3. Урок: Основы Thymeleaf — Официальное руководство по Thymeleaf, где подробно рассмотрены условные конструкции.
  4. GitHub – thymeleaf/thymeleaf — Изучите исходный код и документацию Thymeleaf для более детального понимания работы условных операторов.
  5. Spring Boot + Thymeleaf: Пример "Hello, World" — Практические уроки от Mkyong, которые могут неожиданно раскрыть аспекты использования условных операторов в Thymeleaf.