Cách lấy giá trị chỉ mục từ vòng lặp foreach trong jstl


106

Tôi có một giá trị được đặt trong requestđối tượng như sau,

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

và đây là cách tôi lặp lại trong trang jsp

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

Làm cách nào để lấy chỉ mục của từng phần tử và chuyển nó vào hàm JavaScript onclick="getCategoryIndex()".

Câu trả lời:


234

sử dụng varStatus để lấy chỉ mục c: forEach thuộc tính varStatus

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

Tôi có được điều này Uncaught ReferenceError: lặp không được định nghĩa 'và +1 cho nỗ lực của bạn
Câu hỏi Java

onClick vào phần tử được hiển thị
Câu hỏi Java

Vì giá trị varStatus chứa giá trị cho đến khi lặp lại vòng lặp. Sau đó giá trị không phải là giá trị hợp lệ. vì vậy chỉ bạn có ngoại lệ. Bạn cần chỉ mục cho mục đích nào
newuser

Tôi cần biết chỉ mục [vị trí] của mỗi phần tử có trong Mảng chuỗi.
Câu hỏi Java

nó hoạt động :) nếu tôi làm theo cách này onclick = "getCategoryIndex ($ {loop.index})" ... cảm ơn vì sự giúp đỡ
Câu hỏi Java

19

Tôi phải đối mặt với vấn đề tương tự bây giờ tôi hiểu rằng chúng tôi có một số tùy chọn khác: varStatus = "loop", Đây sẽ là biến vòng lặp sẽ giữ chỉ mục của lop.

Nó có thể sử dụng để đọc cho chỉ số cơ sở Zeor hoặc 1 chỉ số cơ sở một.

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

${loop.index} it will give 0 base index as normal Index of array bắt đầu từ 0.

Ví dụ :

<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>

Để biết thêm thông tin, vui lòng tham khảo liên kết này


11

Bạn có thể sử dụng varStatusthuộc tính như sau: -

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

myIndex.index sẽ cung cấp cho bạn chỉ mục. Đây myIndexlà một đối tượng LoopTagStatus .

Do đó, bạn có thể gửi nó tới phương thức javascript của mình như sau: -

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

Tôi có được điều này Uncaught ReferenceError: myIndex is not defined và +1 cho nỗ lực của bạn
Câu hỏi Java

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

dòng trên đã cho tôi một lỗi. Vì vậy, tôi đã viết ra dưới đây theo cách làm việc tốt cho tôi.

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

Có thể ai đó khác có thể gặp lỗi tương tự. Nhìn này các bạn!


0

Điều này phù hợp với tôi:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.