Thymeleaf ตัวดำเนินการ ternary หลายตัวที่มีเงื่อนไข OR
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()
และผนวกคลาสตามเงื่อนไขหรือไม่