2

我的 JSP 中有一个模型属性(它是一个包含名称的列表)。例如myList

现在我可以使用 forEach 轻松地遍历 JSP 中的列表,例如

<c:forEach items="${myList}" var = "singleItem" varStatus="status">  
  ${singleItem.name}
</c:forEach>

这工作正常。现在我的要求是我有一个需要展示的结构:

    <div id="top"></div>
      <p>name1</p>
      <p>name2</p>
    <div id="bottom"></div>

    <div id="top"></div>
      <p>name3</p>
      <p>name4</p>
    <div id="bottom"></div>

    <div id="top"></div>
      <p>name5</p>
      <p>name6</p>
    <div id="bottom"></div>

这里 name1、name2 等在myList. 那么如何运行 forEach 循环以实现上述输出。我被困住了。请帮我。:(

4

2 回答 2

6

虽然我个人赞成的 Sotirios 答案以及 skaffman 最初提出的答案是最初问题的一个非常聪明的解决方法,但它可能会导致 NPE 或需要事先进行一些检查。

我肯定会遵循替代方法或“直接”方式,其中<div>应在必要时插入所有“额外”标记标签(在您的情况下为标签),例如:

<c:set var="length" value="${fn:length(myList)}"/>
<c:forEach items="${myList}" var = "singleItem" varStatus="status">
    <c:if test="${status.index % 2 == 0}">
        <div class="top"></div>
    </c:if>
    <p>${singleItem.name}</p>
    <c:if test="${(status.index % 2 == 1) or (status.index + 1 == length)}">
        <div class="bottom"></div>
    </c:if>
</c:forEach>

另请注意,您应该替换<div>样式类的 id,以防止 JSP 中出现重复的 id。

于 2013-03-31T16:46:39.680 回答
3

每次使用varStatusand属性访问两个列表索引。step

<c:forEach items="${myList}" var="singleItem" varStatus="status" step="2">  
    <div id="top"></div>
        <p>${myList[status.index].name}</p>
        <p>${myList[status.index+1].name}</p>
    <div id="bottom"></div>
</c:forEach>

var您将按索引访问列表,而不是使用。你显然应该检查你是否有偶数个元素,否则你可能会得到 NPE。

于 2013-03-31T16:04:04.300 回答