Use JSTL forEach loop's varStatus as an ID
Asked Answered
C

4

111

I want to use the count from the JSTL forEach loop, but my code doesnt seem to work.

<c:forEach items="${loopableObject}" var="theObject" varStatus="theCount">
    <div id="divIDNo${theCount}">
    </div>
</c:forEach>

produces

<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >
Copier answered 6/7, 2011 at 17:48 Comment(1)
Here is the class' javadoc: download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/… Look what getter methods it offers. Yes, among others there's a getIndex() :)Tiphane
J
269

The variable set by varStatus is a LoopTagStatus object, not an int. Use:

<div id="divIDNo${theCount.index}">

To clarify:

  • ${theCount.index} starts counting at 0 unless you've set the begin attribute
  • ${theCount.count} starts counting at 1
Jural answered 6/7, 2011 at 17:50 Comment(1)
${theCount.count} always starts at 1. ${theCount.index} starts at whatever you have set the begin attribute to. e.g. <c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">Burnedout
P
10

you'd use any of these:

JSTL c:forEach varStatus properties

Property Getter Description

  • current getCurrent() The item (from the collection) for the current round of iteration.

  • index getIndex() The zero-based index for the current round of iteration.

  • count getCount() The one-based count for the current round of iteration

  • first isFirst() Flag indicating whether the current round is the first pass through the iteration
  • last isLast() Flag indicating whether the current round is the last pass through the iteration

  • begin getBegin() The value of the begin attribute

  • end getEnd() The value of the end attribute

  • step getStep() The value of the step attribute

Periodate answered 6/4, 2016 at 15:2 Comment(0)
D
6

You can try this. similar result

 <c:forEach items="${loopableObject}" var="theObject" varStatus="theCount">
    <div id="divIDNo${theCount.count}"></div>
 </c:forEach>
Diapedesis answered 9/7, 2011 at 1:41 Comment(0)
J
1

Its really helped me to dynamically generate ids of showDetailItem for the below code.

<af:forEach id="fe1" items="#{viewScope.bean.tranTypeList}" var="ttf" varStatus="ttfVs" > 
<af:showDetailItem  id ="divIDNo${ttfVs.count}" text="#{ttf.trandef}"......>

if you execute this line <af:outputText value="#{ttfVs}"/> prints the below:

{index=3, count=4, last=false, first=false, end=8, step=1, begin=0}

Jenette answered 15/7, 2014 at 21:1 Comment(2)
@HenryKeiter there is a real answer here. Bad formatting just had all the html hidden until I fixed it.Corporation
This provides the exact same answer as was already provided 3 years earlier (use varStatus.count), only much less readable. Why bother reading other people's answers? ;)Salol

© 2022 - 2024 — McMap. All rights reserved.