Множественный тернарный оператор Thymeleaf с условием ИЛИ
Aug 20 2020
С Thymeleaf я использую это (отлично работает):
<li class="drop-down" th:classappend="${#httpServletRequest.getRequestURI() == '/url1' ? 'active':''}"><a href="#">MainMenu</a>
<ul>
<li><a href="/url1" th:href="@{/url1}"><i
class="fas fa-users"></i> url1</a></li>
<li><a href="/url2" th:href="@{/url2}"><i
class="fas fa-users"></i> url2</a></li>
<li><a href="/url3" th:href="@{/url3}"><i
class="far fa-file-alt mr-1"></i> url3</a></li>
<li><a href="/url4" th:href="@{/url4}"><i
class="fas fa-sign-out-alt mr-1"></i>url4</a></li>
</ul></li>
Теперь я хочу установить активный класс в главное меню, если щелкнет любой из URL 1/2/3/4. Итак, я попробовал это (и это НЕ сработало):
<li class="drop-down" th:classappend="${#httpServletRequest.getRequestURI() == '/url1' ? 'active':'' :: '/url2' ? 'active':'' :: '/url3' ? 'active':'' :: '/url4' ? 'active':'' }"
Также я пробовал много других комбинаций с «или» и «||», ничего не работало. Все эти URL-адреса (пути контекста) совершенно разные, и я НЕ МОГУ использовать like - contains. Я уверен, что мне не хватает идеи, но здесь нужна помощь. Пожалуйста, предложите.
Ответы
1 JakubCh. Aug 20 2020 at 18:33
Кажется, вы хотите добавить active
класс, когда URI запроса соответствует любому из набора фиксированных значений. Итак, вы можете написать свой <li>
элемент так:
<li
class="drop-down"
th:with="urls=${new String[]{'/url1','/url2','/url3','/url4'}}" th:classappend="${#arrays.contains(urls, #httpServletRequest.getRequestURI()) ? 'active' : ''}">
...где:
th:with
объявляет именованный массив,urls
содержащий URL-адреса, который запускает добавление класса.th:classappend
проверяет,urls
содержит ли массив значение, возвращаемое#httpServletRequest.getRequestURI()
классом, и условно добавляет его.