본문 바로가기
Web Programing!/JAVA / JSP

JSTL에서 forEach, forTokens 실전 사용

by 어설픈봉봉이 2015. 9. 9.
반응형
SMALL

 

 

JSTL에서 forEach, forTokens 실전 사용

 

 

목록(Collection) 중에 일부에 대해서만 어떤 처리를 하고 싶을 때가 있습니다. 예를 들면, 앞에 5개까지만 출력한다 라든지 짝수번째만 출력한다든지요. 이럴 경우는 다음 Attribute를 이용하면 됩니다.

 

    * begin: 반복에 사용될 것 중 첫번째 항목의 Index. 0부터 시작한다. 정의되지 않으면 0.
    * end: 반복에 사용될 것 중 마지막 항목의 Index. 정의되지 않으면 목록의 갯수에서 1개 뺀 값이겠죠.
    * step: 반복할 때마다 건너 뛸 index 갯수. for 문의 i 값에 더해지는 것과 같은 개념입니다. 기본은 1 입니다.

 

예를 들어 목록 앞에 5개만 출력한다면 다음과 같이 하시면 됩니다.

 

<ul>
<c:forEach var="studentName" items="list" end="4">
    <li>${studentName }</li>
</c:forEach>
</ul>

 

같은 식으로 5번째부터 끝까지 출력하시려면 begin에 4값을 넣으시면 되겠죠.


forEach와 forTokens에 사용할 수 있는 Attribute 중에 varStatus 라는 게 있습니다. 이게 현재 루핑 상황 정보를 얻을 수 있는 건데요. 여기에 미리 정의된 변수로 다음 4가지 값을 접근할 수 있습니다.

 

    * index: 숫자값으로 items 에 정의한 목록(Collection)의 항목을 가리키는 Index입니다. 0부터 시작하겠죠.
    * count: 숫자값입니다. 루핑을 돌 때 현재 몇 번째 반복인지를 나타냅니다. 1부터 시작합니다.
    * first:  boolean 값입니다. 현재 반복이 첫번째인지 여부를 나타냅니다.
    * last: boolean 값입니다. 현재 반복이 마지막인지 여부를 나타냅니다.

 

여기서 index와 count의 차이가 시작값이 0이냐, 1이냐 밖에 없다고 생각하기 쉬운데, 그렇지 않습니다. 앞 쪽 예처럼 begin을 4로 하게 되면 index는 4, 5, 6, 7, ... 로 나가지만 count는 여전히 1, 2, 3, 4가 됩니다. 혹는 step 값을 2로 주면 index 값이 0, 2, 4, 6, ... 이 되지만 여전히 count는 1, 2, 3, 4가 됩니다.

 

위 변수를 가지고 사용할 수 있는 가장 흔한 경우가 각 항목 사이에 무언가를 넣어야 할 때 입니다. 예를 들어, 목록 사이에 컴마(,)를 넣는 경우말이죠. list 에 성명 목록이 들어 있고 그 사이에 컴마를 넣고 싶다면, 다음과 같이 하면 됩니다.

 

<c:forEach var="studentName" items="list" varStatus="status">
    ${studentName }<c:if test="${not status.last }">, </c:if>
</c:forEach>

 

혹은, 목록 중 첫번째만 강조를 하고자 한다면 다음과 같이 하면 되겠죠.

 

<ul>
<c:forEach var="studentName" items="list" varStatus="status">
    <c:if test="${status.first }"><li><strong>${studentName }</strong></li></c:if>
    <c:if test="${not status.first }"><li>${studentName }</li></c:if>
</c:forEach>
</ul>

 

지금 생각해 보니 앞뒤로 감싸는 태그를 목록이 없으면 아예 안 나오도록 하려면 다음처럼 해도 되겠네요.

 

<c:forEach var="studentName" items="list" varStatus="status">
    <c:if test="${status.first }"><ul></c:if>
    <li>${studentName }</li>
    <c:if test="${status.last }"></ul></c:if>
</c:forEach>

 

[출처] JSTL에서 forEach, forTokens 실전 사용 (대전 IT 프로그래머 프리랜서 모임)

 

반응형