차근차근/JQuery Ajax Jstl

[JSTL] <c:forEach> 정리 및 테이블 형태 출력

예쁜꽃이피었으면 2014. 9. 30. 17:45

http://www.mhyeon.com/?p=5451



[JSTL] <c:forEach> 정리 및 테이블 형태 출력

JSTL 태그에서 반복문을 수행할 때 <c:forEach>를 사용한다.

<c:forEach>는 두가지 형태의 반복문을 지원한다.


1. 배열 리스트를 순서대로 반복

movielist

 

위의 그림과 같이 movieList 배열이 순서대로 세로로 출력된다.

배열을 가로로 출력하고 싶다면, <tr> 을 <c:forEach> 밖으로 빼면 된다.


movielist2

 

2. 횟수를 지정하여 반복문 실행 (테이블 출력)

foreach3

위와 같이 begin 과 end를 사용하여 루프의 시작번호와 마지막 번호를 지정하고 마지막 번호까지 loop를 반복하게 한다.

이중 루프로 <td> 가 5번 그리고 이 묶음이 4번을 돌아 위와 같이 5*4 배열이 출력된다.


3. 동적 배열 테이블로 출력

배열의 길이가 너무 길어서, 가로 또는 세로로 출력을 하면 너무 길어지는 경우가 많다.

이럴때 동적으로 테이블 형태로 출력을 하고 싶을 것이다.

그러면 이중 for문을 사용해야 하는데 java나 javascript 에서는 어렵지 않다.

하지만 <c:forEach> 는 조금 제한이 된다.

이중 for 문으로 테이블 형으로 출력하기 위해서는 (배열의 전체 길이/열의 길이) 값이 필요한데,

end 속성에 변수 값을 넣으면 에러가 발생한다.

end에 숫자만 넣을 수 있어 동적인 값 셋팅이 불가능 하다.


그래서 해결 방법으로 배열을 리스트로 출력하는 1번 방법에서 열의 수만큼 출력이 됐을때, <tr>로 줄바꿈을 해주는 것이다.

반복문이 도는 가운데 status 의 현재 값이 5의 배수일 경우에는 </tr><tr> 로 줄바꿈을 해주는 것이다.

위의 코드를 실행하면 movieList 배열이 순서대로 5열로 출력될 것이다.


* 옵션

items : 반복 데이터가 있는 배열 또는 Collection

begin : 시작 번호 Default 0

end : 종료 번호

step : 증가분

var : 현재 아이템의 변수 이름

varStatus : 반복 상태 값을 지닌 변수

- ${status.current} : 현재의 for문에 해당하는 번호

- ${status.index} : 0부터의 순서

- ${status.count} : 1부터의 순서

- ${status.first} : 현재 루프가 처음인지 확인

- ${status.last} : 현재 루프가 마지막인지 확인

- ${status.begin} : for문의 시작 값

- ${status.end} : for문의 끝 값

- ${status.step} : for문의 증가값


반응형