Use varStatus do loop JSTL forEach como um ID

104

Eu quero usar a contagem do loop JSTL forEach, mas meu código não parece funcionar.

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

produz

<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >
Mark W
fonte
9
Aqui está o javadoc da classe: download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/… Veja quais métodos getter ele oferece. Sim, entre outros há um getIndex():)
BalusC

Respostas:

259

A variável definida por varStatusé um LoopTagStatusobjeto, não um int. Usar:

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

Esclarecer:

  • ${theCount.index}começa a contar a 0menos que você tenha definido o beginatributo
  • ${theCount.count} começa a contar em 1
altamente cafeinado
fonte
21
${theCount.count} sempre começa em 1. ${theCount.index}começa em tudo o que você definiu para o beginatributo. por exemplo<c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">
vegemite4me
8

você usaria qualquer um destes:

JSTL c: propriedades de forEach varStatus

Descrição da propriedade Getter

  • current getCurrent () O item (da coleção) para a rodada atual de iteração.

  • index getIndex () O índice baseado em zero para a rodada atual de iteração.

  • count getCount () A contagem baseada em um para a rodada atual de iteração

  • first isFirst () Sinalizador que indica se a rodada atual é a primeira passagem pela iteração
  • last isLast () Sinalizador que indica se a rodada atual é a última passagem pela iteração

  • begin getBegin () O valor do atributo begin

  • end getEnd () O valor do atributo end

  • step getStep () O valor do atributo step

diego matos - keke
fonte
4

Você pode tentar isso. resultado semelhante

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

Realmente me ajudou a gerar ids dinamicamente showDetailItempara o código abaixo.

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

se você executar esta linha <af:outputText value="#{ttfVs}"/>imprime o seguinte:

{índice = 3, contagem = 4, último = falso, primeiro = falso, final = 8, etapa = 1, início = 0}

Jyoti Pani
fonte
@HenryKeiter, há uma resposta real aqui. A formatação ruim apenas mantinha todo o html oculto até que eu consertei.
Dan Is Fiddling By Firelight
Isso fornece exatamente a mesma resposta que já foi fornecida 3 anos antes (uso varStatus.count), apenas muito menos legível. Por que se preocupar em ler as respostas de outras pessoas? ;)
rustyx