【问题标题】:JSP Insert footer based on condition in for loopJSP根据for循环中的条件插入页脚
【发布时间】:2013-06-14 05:08:14
【问题描述】:

我想循环打印一个记录表,基于以下条件:

如果记录数超过 35 条,我需要暂停循环,插入页脚和下一页的新页眉,然后继续计数直到最后一条记录。

这里的条件是只使用jsp classic scriplet。

这是我所拥有的,但我被卡住了:(伪代码格式)

<% int j=0;
   for(int i=0; i < list.size(); i++){
    col1 = list.get(i).getItem1();
    col2 = list.get(i).getItem2();
    col3 = list.get(i).getItem3();
    j++;

    if (j==35) {%> // stops to render footer and next page's header 
    </table>
    <table>
       <!-- footer contents -->
    </table>
    <table>
       <!-- header for next page -->
    </table>
    <%}%>
<tr><td><%=col1%></td><td><%=col1%></td><td><%=col1%></td></tr>

<%}%>

这个模型的问题是,如果我在这个 if 中使用了一个 break,我会停止循环并且我不能从记录 #36 循环到记录结尾。 我该怎么做?

【问题讨论】:

  • 这称为分页。您确定必须自己处理还是可以使用第三方组件为您处理?另外,您是否使用任何类型的框架以及 Spring MVC 或 JSF 进行开发?
  • 嗨 Luiggi,我不想在这里使用分页,因为它是用于打印目的。

标签: java jsp loops for-loop scriptlet


【解决方案1】:

使用if (i % 35 == 0) 编写页脚,然后验证列表中是否有更多元素,因此您必须添加一个新表及其标题。代码如下所示:

<!-- table header -->
<%
int size = list.size();
int i = 0;
for(Iterator<YourObject> it = list.iterator(); it.hasNext(); ) {
    i++;
    YourObject someObject = it.next();
    col1 = someObject.getItem1();
    col2 = someObject.getItem2();
    col3 = someObject.getItem3();
    if (i % 35 == 0) {
%>
    <!-- table footer -->
<%
        if (i < size) {
%>
    <!-- breakline and new table header -->
<%
        }
    }
}
%>
<!-- table footer -->

请注意,在此代码示例中,我使用Iterator 而不是List#get(int index),因为如果您的List 在内部是LinkedList,则需要遍历所有元素,直到到达所需索引上的元素(在这种情况下,i)。有了这个实现,你的代码就更干净了。

【讨论】:

    【解决方案2】:

    如果您不想使用正确的分页,请使用 JSTL,如下所示。除了明显的好处之外,还比 scrip-let 更易于阅读。

    //The counter variable initialization
    <c:set var="counter" value="0" scope="page"/>
    <c:forEach items="${itemList}" var="item">
    
      //Counter increment
      <c:set var="counter" value="${counter + 1}" scope="page"/>
      <tr>
        <td>${item.propertyOne}</td>
        <td>${item.propertyOne}</td>
      </tr>
      <c:if test="${counter % 35 == 0}">
        //Include your footer here.
      </c:if>
    </c:forEach>
    

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 2016-08-19
      • 1970-01-01
      • 2020-06-05
      • 2014-09-03
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 2022-06-22
      相关资源
      最近更新 更多