JSTL:迭代列表,但以不同的方式处理第一个元素

2022-09-01 20:05:14

我正在尝试使用jstl处理列表。我想以不同于其余元素的方式处理列表的第一个元素。也就是说,我只希望第一个元素的 display 设置为 block,其余的应该被隐藏。

我似乎臃肿,不起作用。

感谢您的任何帮助。

<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>

答案 1

它可以更短地完成,而无需:<c:if>

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

答案 2

是的,在 foreach 元素中声明 varStatus=“stat”,这样你就可以问它是第一个还是最后一个。它是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> 

推荐