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(コンテキストパス)はすべて完全に異なり、-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:withurlsクラスの追加をトリガーするurlを含むという名前の配列を宣言します。
  • th:classappendurls配列に返される値が含まれているかどうかをチェックし#httpServletRequest.getRequestURI()、条件付きでクラスを追加します。