JSP中<c:forEach>如何输出数组索引而非总长度?
问题描述
开发购物车(Cart)功能时,需要为每条订单打印对应的行号。目前使用<c:forEach>遍历订单列表,但通过${requestScope.cartsize}输出的是数组总长度,导致所有订单行显示相同的数值(例如数组长度为3时,所有行都显示3)。需要实现行号依次显示为1、2、3、4...的效果。
相关代码:
Cart is having:<br> <c:forEach var="item" items="${sessionScope.cart.cupcakeList}"> Bottom: ${item.bottom.name} Topping: ${item.top.name} Price ${item.quantity} Order line number: ${requestScope.cartsize} <form action="addtocart"><button name="removeFromCart" value="${requestScope.cartsize}"type="submit">Fjern fra kurv</button></form><br> </c:forEach>
解决方案
使用<c:forEach>的varStatus属性即可获取当前遍历项的索引,由于索引默认从0开始,只需给索引加1就能得到从1开始的行号。
修改后的代码如下:
Cart is having:<br> <c:forEach var="item" items="${sessionScope.cart.cupcakeList}" varStatus="loopStatus"> Bottom: ${item.bottom.name} Topping: ${item.top.name} Price ${item.quantity} Order line number: ${loopStatus.index + 1} <form action="addtocart"><button name="removeFromCart" value="${loopStatus.index}" type="submit">Fjern fra kurv</button></form><br> </c:forEach>
关键说明:
- 添加
varStatus="loopStatus":该属性会创建一个LoopTagStatus对象,包含当前遍历的状态信息(如索引、计数等)。 ${loopStatus.index + 1}:index返回当前项的索引(从0开始),加1后得到从1开始的连续行号。- 删除按钮的
value改为${loopStatus.index}:如果需要根据索引删除对应项,这里应该传递当前项的索引而非总长度,确保删除操作能定位到正确的订单行。
内容的提问来源于stack exchange,提问作者Narj
相关产品推荐
相关产品推荐

