Thymeleaf multiple terner operator dengan kondisi OR
Aug 20 2020
Dengan Thymeleaf saya menggunakan ini (berfungsi dengan baik):
<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>
Sekarang saya ingin mengatur kelas aktif ke menu utama jika ada URL 1/2/3/4 yang diklik. Jadi saya mencoba ini (Dan itu TIDAK berhasil):
<li class="drop-down" th:classappend="${#httpServletRequest.getRequestURI() == '/url1' ? 'active':'' :: '/url2' ? 'active':'' :: '/url3' ? 'active':'' :: '/url4' ? 'active':'' }"
Saya juga mencoba banyak kombinasi lain dengan "atau" dan "||", tidak ada yang berhasil. Semua URL ini (jalur konteks) sama sekali berbeda dan saya TIDAK BISA menggunakan like - contains. Saya yakin saya melewatkan idenya, tetapi butuh bantuan di sini. Mohon saran.
Jawaban
1 JakubCh. Aug 20 2020 at 18:33
Sepertinya Anda ingin menambahkan active
kelas saat URI permintaan cocok dengan salah satu dari kumpulan nilai tetap. Jadi Anda bisa menulis <li>
elemen Anda seperti ini:
<li
class="drop-down"
th:with="urls=${new String[]{'/url1','/url2','/url3','/url4'}}" th:classappend="${#arrays.contains(urls, #httpServletRequest.getRequestURI()) ? 'active' : ''}">
...dimana:
th:with
mendeklarasikan larik bernamaurls
berisi url yang memicu penambahan kelas.th:classappend
memeriksa apakahurls
array berisi nilai yang dikembalikan oleh#httpServletRequest.getRequestURI()
dan menambahkan kelas secara bersyarat.
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'