在jstl中结束表行

时间:2012-03-12 13:27:01

标签: java jstl

我正在尝试使用一个表来显示一些图像,我每行允许3个图像,但是当我有一个少于3个图像的行时,我不知道如何结束表行。请参阅下面的代码段,了解我一直在尝试的内容。

使用ul我不必担心它,但我被指示使用表格。如何确保最后一行正确终止?我是jstl的新手。

谢谢,

    <% int endTRFlag = 0; %>
    <table width="100%">
      <tr>
      <core:forEach var="imageURL" items="${actionBean.imageURLs}" varStatus="rowCounter">
         <td align="center" valign="middle">
          <div class="item">
            <a href="#"><img src="${imageURL}" alt="Photo 1" class="img" /></a> 
          </div>
         </td>
         <% endTRFlag = 1; %>
      <core:if test="${ (rowCounter.count % 3 == 0) }">
      </tr>
      <tr>
      <% endTRFlag = 0; %>
      </core:if>
      <core:if test="${ (rowCounter.count % 3 != 0) && (endTRFlag == 0)}">
      </tr>
      </core:if>

      </core:forEach>

2 个答案:

答案 0 :(得分:2)

在下面的代码中,我使用.index而不是.count,因为它基于0,因此对模数(0 / 3,3 / 3等)更有效。如果当前元素是列表中的最后一个元素,则.lasttrue。这个解决方案确实导致Eclipse中的验证错误(至少是Ganymede),这很烦人。

<c:forEach var="imageURL" items="${actionBean.imageURLs}" varStatus="rowCounter">
    <c:if test="${rowCounter.index mod 3 eq 0}">
        <tr>
    </c:if>
    <td>stuff</td>
    <c:if test="${(rowCounter.index+1) mod 3 eq 0 or rowCounter.last}">
        </tr>
    </c:if>
</c:forEach>

答案 1 :(得分:-1)

只需将</tr>放在循环之后。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<c:set var="imageCnt" value="${fn:length(actionBean.imageURLs)}"/>
<table width="100%">  
  <tr>
    <c:forEach var="imageURL" items="${actionBean.imageURLs}"
      varStatus="rowCounter">
      <td align="center" valign="middle">
        <span class="item"> 
          <a href="#"><img src="${imageURL}" alt="Photo 1" class="img" /></a>
        </span>
      </td>
    </c:forEach>
    <c:forEach begin="${imageCnt}" end="2">
      <td/>
    </c:forEach>
  </tr>  
</table>