Struts 2条件div标签

时间:2013-07-26 18:07:40

标签: struts2 ognl struts-tags

我正在我的网站上工作并尝试从数据库中打印出投资组合对象。我打印出来的页面有分页。

当使用以下标记时,我使用脚本创建新页面:

<div class="pics">
...
</div>

最多只能有8个锚标签进入上面的div。锚标签不是什么特别的,它们确实使用<s:property>标签,但这就是它。

为了实现此功能,我尝试了以下内容:

<c:set var="counter" value="0"/>
<s:iterator value="allPortfolio">
    <c:if test="${(counter mod 8) == 0}">
        <div class="pics">
   </c:if>

   <a href="<s:property value="filename">">Download</a>

    <c:if test="${(counter mod 8) == 0}">
        </div>
    </c:if>

    <c:set var="counter" value="${counter+1}"/>

</s:iterator>

但是,此代码创建了11个页面(我的数据库中每个项目组合对象1个)。它应该只创建2页,第一页有8个项目,第二页有剩余的3个。

换句话说,应该只有2个

<div class="pics">
...
</div>

一个有8个锚标签,一个有3个锚标签。

相反,这是在页面加载后创建的代码:

 <div class="pics">
     <a href="1ba918625bca57f6e059c2d05393010b04da5ed6.png">Download</a>
 </div>
 <a href="ec49d4ca243a481b7fa819dfea783e0dd8f5a431.jpg">Download</a>   
 <a href="1b4ab5a3bebdf88045ef3818e852185c86e33048.png">Download</a>
 <a href="e12eaed32a97bb78ddd863696ca510d943c4d978.png">Download</a>
 <a href="2b6ee029b3fcef21b0a220a6b14de16206ce588b.png">Download</a>
 <a href="e3e94e7ac6bfb09ca012d30912525848f2d361ed.png">Download</a>
 <a href="f07e24b31fb65e38aa3d4bbe97a24a71c281aae7.png">Download</a>
 <a href="dd41b536ca45642fa9827311498b9480d6df9be8.png">Download</a>
 <div class="pics">
     <a href="a2ad0d4b73daa3311e9f9b16dcd7d9476cd6e748.png">Download</a>
 </div>
 <a href="45fa47125a5dfe3608d6d80fb0a9ba1f5c444264.png">Download</a>
 <a href="ee9b1571aa22e935772792ac363cc95e2a77bdfd.png">Download</a>

3 个答案:

答案 0 :(得分:1)

实际上你不需要那个计数器,因为Struts2 <s:iterator>标签具有status属性。定义它,你可以在迭代器中使用它的各种属性。例如,index将返回从0开始的当前迭代计数。first属性是boolean,表示它是迭代中的第一个可用项。

BTW别忘了关闭你的标签。

<s:iterator value="allPortfolio" status="stat">
  <s:if test="#stat.first">
    <div class="pics">
  </s:if>
  <s:if test="!#stat.first && #stat.index % 8 == 0">
    </div>
    <div class="pics">
  </s:if>

  <a href="<s:property value="filename"/>">Download</a>

  <s:if test="#stat.last">
    </div>
  </s:if>
</s:iterator>

答案 1 :(得分:0)

使用8的模数意味着每8个链接将被8整除,余数为0。这不是解决问题的方法。

你想要使用类似的东西:

<c:set var="counter" value="0" />

<s:iterator value="allPortfolio">
  <c:if test="${counter gt 7}">
    <c:set var="counter" value="0" />
  </c:if>

  <c:if test="${counter eq 0}">
      <div class="pics">
  </c:if>

  <a href="<s:property value="filename">">Download</a>

  <c:if test="${counter eq 7}">
      </div>
  </c:if>

  <c:set var="counter" value="${counter+1}" />
</s:iterator>

<c:if test="{counter ne 8}">
  </div>
</c:if>

最后一位用于关闭最后一个div,以防它被打开。

答案 2 :(得分:0)

试试此代码

<s:set var="countdown" value="0"/>
<s:iterator value="allPortfolio" status="status">

  <s:if test="#status.index % 8 == 0">
    <div class="pics">
    <s:set var="countdown" value="7"/> 
  </s:if>

   <a href="<s:url value='%{filename}'/>">Download</a>

   <s:if test="#countdown == 0 || #status.last">
     </div>
   </s:if>

   <s:set var="countdown" value="%{#countdown-1}"/>
</s:iterator>
相关问题