Оптимальное использование if-else в Thymeleaf: советы и примеры
Быстрый ответ
Вы можете реализовать логику if-else в Thymeleaf, используя атрибут th:if
для условиевмерного применения if, и th:else
(или же отрицание с помощью th:if
) для условиевмерного применения else. Осмотрите пример:
<span th:if="${condition}" th:text="'Истина'"></span>
<span th:else th:text="'Ложь'"></span>
Cуществует и упрощённый способ с применением тернарного оператора:
<span th:text="${condition} ? 'Истина' : 'Ложь'"></span>
Всё довольно просто и понятно, но давайте углубимся в детали.
Использование конструкций switch-case с помощью th:switch и th:case
Kогда вашей задачей является обработка множества условий, th:switch
и th:case
сделают это решение наиболее эффективным. Эти атрибуты проверяют условие только один раз и применяют это условие ко всему массиву случаев, исключая необходимость повторяемости th:if
. Посмотрите пример ниже:
<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
. Он позволяет присвоить результат выражения локальной переменной, которая затем используется для дальнейших операций. Взгляните на следующий пример:
<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
направит нас в промышленный район (🏭
), где зародилась "ложь".
<div th:if="${condition}">
<!-- Загородная зона [истина] 🏡 -->
</div>
<div th:else>
<!-- Промышленный квартал [ложь] 🏭 -->
</div>
Развивайтесь: грамотное программирование ближе, чем кажется! 🛤️🚦
Безопасные условные операторы с thymeleaf-extras-springsecurity5
При работе с Spring Security, Thymeleaf удивительно прост в интеграции с помощью thymeleaf-extras-springsecurity5
, что помогает безопасно отражать контент, сообразуясь с состоянием аутентификации и авторизации:
<div th:if="${#authorization.expr('hasRole(''ADMIN'')')}">
<!-- Только для администраторов -->
</div>
Так вы можете контролировать не только то, вошёл ли пользователь успешно в систему, но и обладает ли он соответствующими правами доступа.
Адаптация мной отображаемого текста с помощью th:text
В том случае, если текст на веб-странице должен меняться в соответствии с проверенными условиями, th:text
вам в этом поможет. Этот атрибут непревзойдённо работает с условными выражениями, помогая тексту вникать в динамику происходящего:
<span th:text="${user.isAdmin()} ? 'Панель администратора' : 'Профиль пользователя'"></span>
Благодаря этому, текст будет адаптироваться к текущему состоянию: вот его чудеса в действии.
Персонализированный пользовательский опыт в реальных условиях
Особое внимание следует уделять созданию особого функционала для авторизованных пользователей, в отличие от неавторизованных. Вы могли бы подумать об этом, как о подборе меню для разных категорий посетителей в ресторане:
<span th:if="${user.loggedIn}" th:text="'Выйти'"></span> <!-- Время прощаться -->
<span th:unless="${user.loggedIn}" th:text="'Войти или зарегистрироваться'"></span> <!-- Добро пожаловать на борт -->
Полезные материалы
- Урок: Thymeleaf + Spring — широкомасштабное руководство, посвящённое использованию Thymeleaf в тандеме со Spring, в том числе условных конструкций.
- Java Spring Boot: Как сделать index.html стартовой страницей моего приложения ("/")? — Обсуждение на StackOverflow о маршрутизации в Thymeleaf, включая вопросы условного рендеринга.
- Урок: Основы Thymeleaf — Официальное руководство по Thymeleaf, где подробно рассмотрены условные конструкции.
- GitHub – thymeleaf/thymeleaf — Изучите исходный код и документацию Thymeleaf для более детального понимания работы условных операторов.
- Spring Boot + Thymeleaf: Пример "Hello, World" — Практические уроки от Mkyong, которые могут неожиданно раскрыть аспекты использования условных операторов в Thymeleaf.