2010-01-07 76 views
20

我正在尝试使用jstl处理列表。我想把列表中的第一个元素与其他元素区别开来。也就是说,我只想要第一个元素将显示设置为阻止,其他应该隐藏。JSTL:迭代列表,但不同地对待第一个元素

我现在看起来臃肿,并且不起作用。

感谢您的任何帮助。

<c:forEach items="${learningEntry.samples}" var="sample"> 
    <!-- only the first element in the set is visible: --> 
    <c:if test="${learningEntry.samples[0] == sample}"> 
     <table class="sampleEntry"> 
    </c:if> 
    <c:if test="${learningEntry.samples[0] != sample}"> 
     <table class="sampleEntry" style="display:hidden"> 
    </c:if> 

回答

44

它命名为c一个做甚至更短,无<c:if>

<c:forEach items="${learningEntry.samples}" var="sample" varStatus = "status"> 
    <table class="sampleEntry" ${status.first ? '' : 'style = "display:none"'}> 
</c:forEach> 
+0

根据使用情况,你也可以使用一个语句的时候foreach循环里面'' – davidcondrey 2015-02-04 18:53:25

5

是,宣布在foreach元素varStatus =“统计”,所以你可以要求它,如果它是第一个还是最后一个。它是一个LoopTagStatus类型的变量。

这是LoopTagStatus商务部: http://java.sun.com/products/jsp/jstl/1.1/docs/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html 它有更多有趣的属性...

<c:forEach items="${learningEntry.samples}" var="sample" varStatus="stat"> 
    <!-- only the first element in the set is visible: --> 
    <c:if test="${stat.first}"> 
     <table class="sampleEntry"> 
    </c:if> 
    <c:if test="${!stat.first}"> 
     <table class="sampleEntry" style="display:none"> 
    </c:if> 

编辑:从axtavt复制

这是可以做到更短,无<c:if>

<c:forEach items="${learningEntry.samples}" var="sample" varStatus = "status"> 
    <table class="sampleEntry" ${status.first ? '' : 'style = "display:none"'}> 
</c:forEach> 
相关问题