JSTL: повторять список, но обрабатывать первый элемент по-разному - PullRequest
22 голосов
/ 07 января 2010

Я пытаюсь обработать список с помощью 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>

Ответы [ 2 ]

49 голосов
/ 07 января 2010

Это можно сделать еще короче, без <c:if>:

<c:forEach items="${learningEntry.samples}" var="sample" varStatus = "status">
    <table class="sampleEntry" ${status.first ? '' : 'style = "display:none"'}> 
</c:forEach> 
5 голосов
/ 07 января 2010

Да, объявляйте varStatus = "stat" в элементе foreach, чтобы вы могли спросить, первый это или последний. Это переменная типа 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> 
...