2009년 9월 9일 수요일

JSTL c:forEach 활용 하기 (first, last)

얼마전 컨트롤러에서 저장된 List 객체를 JSP에서
출력을 하려고 했습니다.
JSTL의 "c:forEach"을 이용해서 처리 하려고 했는데
요구 사항이 좀 지저분 했습니다.
마지막 Row만 다른 css의 class를 적용 해야 했습니다.
이런 자잘 하면서 은근 손이 가는건 정말 짜증이 밀려 옵니다.
컨트롤러에서 List를 하나씩 꺼내서 마크를 할까 아니면
그냥 JSP의 스크립트를 사용할까 고민고민 하던중
JSTL의 깜찍한 기능을 발견 하게 되었습니다.
뒷북이지만 만약 모르신분들이 있다면 유용하게 사용 할 것
같아서 포스팅 합니다.

  • 사용 방법
아래와 같이 출력이 되어야 합니다.
"★ spring | Beyond | J2EE"
첫번째 Row에는 "" 찍어야 하고 마지막 Row는 "|"를 생략 해야 합니다.

Controller Side
List list = new ArrayList();
list.add("spring");
list.add("Beyond");
list.add("J2EE");
request.setAttribute("list",list);

Jsp Side


<c:foreach var="resultList" items="${list}" varstatus="status">
<c:if test="${status.first}">

</c:if>
<c:out value="${resultList}">
<c:if test="${!status.last}">
|
</c:if>
</c:out>
</c:foreach>

1 : varStatus 속성을 이용해서 loop시 현재 Row를
참조 할 수 있도록
합니다.
2 ~ 4 : varStatus 속성에 정의된 변수의 상태 값
중에서 "first" 즉
첫번째 Row일 경우에만
실행 합니다.

6 ~ 8 : varStatus 속성에 정의된 변수의 상태 값
중에서 "last"일 경우는 마지막 Row를 실행 하지만
조건을 "Not"을 주었기 때문에 반대인 경우입니다.
,즉 마지막 Row가 아닐경우만 실행 합니다.

이런 기능이 이미 있었는데도 귀찮니즘때문에 찾아 보지
않았던 것 같습니다. 개발하기전에 "혹시 이런 기능이
있지 않을까" 하면서 스펙을 찾아보는 습관이
중요하다는걸 새삼 느낍니다.

댓글 없음:

댓글 쓰기