วิธีรับค่าดัชนีจาก foreach loop ใน jstl


110

ฉันมีค่าที่กำหนดไว้ในrequestวัตถุดังต่อไปนี้

String[] categoriesList=null;
categoriesList = engine.getCategoryNamesArray();
request.setAttribute("categoriesList", categoriesList );

และนี่คือวิธีที่ฉันทำซ้ำในหน้า jsp

<% if(request.getAttribute("categoriesList") != null) { %>
<c:forEach var="categoryName" items="${categoriesList}">
   <li><a onclick="getCategoryIndex()" href="#">${categoryName}</a></li>
</c:forEach>
<% }%>

ฉันจะรับดัชนีของแต่ละองค์ประกอบและส่งต่อไปยังฟังก์ชัน JavaScript onclick="getCategoryIndex()"ได้อย่างไร

คำตอบ:


236

ใช้varStatusเพื่อรับดัชนี c: forEach คุณสมบัติ varStatus

<c:forEach var="categoryName" items="${categoriesList}" varStatus="loop">
    <li><a onclick="getCategoryIndex(${loop.index})" href="#">${categoryName}</a></li>
</c:forEach>

ฉันUncaught ReferenceError: ไม่ได้กำหนดลูปนี้ 'และ +1 สำหรับความพยายามของคุณ
คำถาม Java

onClick ขององค์ประกอบที่แสดง
คำถาม Java

เนื่องจากค่า varStatus มีค่าไม่เกินการวนซ้ำ หลังจากนั้นค่าจะไม่ถูกต้อง ดังนั้นคุณเท่านั้นที่ได้รับข้อยกเว้น เพื่อจุดประสงค์ใดที่คุณต้องการดัชนี
newuser

ฉันต้องการทราบว่าดัชนี [ตำแหน่ง] ของแต่ละองค์ประกอบมาใน String Array
คำถาม Java

มันใช้งานได้ :) ถ้าฉันทำวิธีนี้ onclick = "getCategoryIndex ($ {loop.index})" ... ขอบคุณสำหรับความช่วยเหลือ
คำถาม Java

20

ฉันประสบปัญหาที่คล้ายกันตอนนี้ฉันเข้าใจว่าเรามีตัวเลือกเพิ่มเติม: varStatus = "loop" ที่นี่จะมีตัวแปร loop ซึ่งจะเก็บดัชนีของ lop ไว้

สามารถใช้เพื่อใช้ในการอ่านสำหรับดัชนีฐาน Zeor หรือ 1 ดัชนีฐานหนึ่ง

${loop.count}` it will give 1 starting base index.

${loop.index} it will give 0 base index as normal Index of array เริ่มจาก 0.

ตัวอย่างเช่น :

<c:forEach var="currentImage" items="${cityBannerImages}" varStatus="loop">
<picture>
   <source srcset="${currentImage}" media="(min-width: 1000px)"></source>
   <source srcset="${cityMobileImages[loop.count]}" media="(min-width:600px)"></source>
   <img srcset="${cityMobileImages[loop.count]}" alt=""></img>
</picture>
</c:forEach>

สำหรับข้อมูลเพิ่มเติมโปรดดูที่ลิงค์นี้


11

คุณสามารถใช้varStatusแอตทริบิวต์ดังนี้: -

<c:forEach var="categoryName" items="${categoriesList}" varStatus="myIndex">

myIndex.indexจะให้ดัชนีแก่คุณ นี่myIndexคือวัตถุLoopTagStatus

ดังนั้นคุณสามารถส่งสิ่งนั้นไปยังวิธีการจาวาสคริปต์ของคุณดังนี้: -

<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

ฉันได้รับสิ่งนี้Uncaught ReferenceError: myIndex is not defined และ +1 สำหรับความพยายามของคุณ
คำถาม Java

0
<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

บรรทัดด้านบนทำให้ฉันมีข้อผิดพลาด ดังนั้นฉันจึงเขียนลงไปด้านล่างซึ่งทำงานได้ดีสำหรับฉัน

<a onclick="getCategoryIndex('<c:out value="${myIndex.index}"/>')" href="#">${categoryName}</a>

บางทีคนอื่นอาจได้รับข้อผิดพลาดเดียวกัน ดูพวกนี้สิ!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.