【问题标题】:Use JSTL forEach loop's varStatus as an ID使用 JSTL forEach 循环的 varStatus 作为 ID
【发布时间】:2011-09-29 20:29:32
【问题描述】:

我想使用 JSTL forEach 循环中的计数,但我的代码似乎不起作用。

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

产生

<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >

【问题讨论】:

标签: java jsp jstl el


【解决方案1】:

varStatus 设置的变量是 LoopTagStatus 对象,而不是 int。使用:

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

澄清一下:

  • ${theCount.index}0 开始计数,除非您设置了 begin 属性
  • ${theCount.count}1 开始计数

【讨论】:

  • ${theCount.count} always 从 1 开始。${theCount.index} 从您设置的 begin 属性开始。例如&lt;c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount"&gt;
【解决方案2】:

您可以使用以下任何一种:

JSTL c:forEach varStatus 属性

属性获取器说明

  • current getCurrent() 当前的项目(来自集合) 一轮迭代。

  • index getIndex() 本轮从零开始的索引 迭代。

  • count getCount() 本轮迭代的从一开始的计数

  • first isFirst() 标志是否当前轮 是第一次通过迭代
  • last isLast() 指示当前轮次是否为最后一次迭代的标志

  • begin getBegin()开始属性的值

  • end getEnd() end 属性的值

  • step getStep() step属性的值

【讨论】:

    【解决方案3】:

    你可以试试这个。类似的结果

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

    【讨论】:

      【解决方案4】:

      它确实帮助我为以下代码动态生成showDetailItem 的ID。

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

      如果你执行这行&lt;af:outputText value="#{ttfVs}"/&gt; 会打印以下内容:

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

      【讨论】:

      • @HenryKeiter 这里有一个真正的答案。错误的格式只是隐藏了所有的 html,直到我修复它。
      • 这提供了与 3 年前已经提供的完全相同的答案(使用 varStatus.count),只是可读性要低得多。为什么要阅读其他人的答案? ;)
      猜你喜欢
      • 2015-01-02
      • 2015-09-26
      • 2014-03-03
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2021-12-13
      相关资源
      最近更新 更多