OR 조건이있는 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':'' }"

또한 "or"및 "||"와 함께 많은 다른 조합을 시도했지만 아무 효과가 없었습니다. 이 모든 URL (컨텍스트 경로)은 완전히 다르며 다음과 같이 사용할 수 없습니다. 나는 아이디어를 놓치고 있다고 확신하지만 여기서 도움이 필요합니다. 친절하게 제안합니다.

답변

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:withurls클래스 추가를 트리거하는 URL을 포함하는 명명 된 배열을 선언합니다 .
  • th:classappendurls배열에에서 반환 된 값이 포함되어 있는지 확인 #httpServletRequest.getRequestURI()하고 조건부로 클래스를 추가합니다.