JSF用div包装列表中的一些元素

时间:2014-11-05 15:23:41

标签: html jsf jstl

我需要生成一些像这样的HTML:

<div class='element'>element</div>
<div class='element'>element</div>
<div class='element'>element</div>
<div class='more-elements'>
    <div class='element'>element</div>
    <div class='element'>element</div>
    <div class='element'>element</div>
</div>

基本上,第三个之后的元素必须在另一个div标签内。我试过这段代码:

<c:set var="hasMore" value="0"/>
<c:forEach items="${elements}" var="element" varStatus="loop">
    <c:if test="${loop.index eq 3}">
        <c:set var="hasMore" value="1"/>
        <div class='more-elements'>
    </c:if>
    <div class='element'>${element.name}</div>
</c:forEach>
<c:if test="{hasMore eq 1}">
    </div>
</c:if>

但是当它尝试渲染页面时,我有一个No end tag found.例外。

这样做的正确方法是什么?

感谢。

2 个答案:

答案 0 :(得分:0)

然后试试这段代码:

<c:set var="hasMore" value="0"/>
<c:forEach items="${elements}" var="element" varStatus="loop">
<c:if test="${loop.index lt 3}">
    <div class='element'>${element.name}</div>     
</c:if>

<c:if test="${loop.index ge 3}">
  <div class='element'>
    <c:set var="hasMore" value="1"/>
    <div class='more-elements'>${element.name}
    </div> 
  </div> 
</c:if>

</c:forEach>

答案 1 :(得分:0)

解决方案是使用<c:out/>标记:

<c:set var="hasMore" value="0"/>
<c:forEach items="${elements}" var="element" varStatus="loop">
    <c:if test="${loop.index eq 3}">
        <c:set var="hasMore" value="1"/>
        <c:out value="<div class='more-elements'>" escapeXml="false"/>
    </c:if>
    <div class='element'>${element.name}</div>
</c:forEach>
<c:if test="{hasMore eq 1}">
    <c:out value="</div>" escapeXml="false" />
</c:if>