본문 바로가기
JAVA/JSP, JSTL, EL

JSTL - foreach / forToken(반복제어)

by 설총이 2018. 7. 25.

- 반복제어


 - foreach


<c:forEach /> Tag

- 객체 전체에 걸쳐 반복 실행에 사용

- <c:forEach var="현재 아이템의 변수명" 

items="반복 데이터가 있는 아이템 Collection 명"

begin="시작 값, 기본값은 0"

end="종료 값"

step="증가 값"

varStatus="반복 상태 값을 지닌 변수" />


※ varStatus는 forEach의 상태를 알 수 있는 값이 들어 있다.

  • $(변수.current} : 현재의 인덱스
  • $(변수.index} : 0부터의 인덱스
  • $(변수.count} : 1부터의 인덱스
  • $(변수.first} : 현재 루프가 처음인지 확인
  • $(변수.last} : 현재 루프가 마지막인지 확인
  • $(변수.begin} : forEach문의 시작 값
  • $(변수.end} : forEach문의 끝 값
  • $(변수.step} : forEach문의 증가 값



출처: http://hackersstudy.tistory.com/42 [공대인들이 직접쓰는 컴퓨터공부방]


예제)


1. 1부터 100까지 홀수의 합


1
2
3
4
5
6
7
<h4>1부터 100까지 홀수의 합</h4>
<c:set var = "sum" value="0"/>
<c:forEach var = "i" begin="1" end = "100" step="2">
<c:set var="sum" value="${sum + i }"/>
</c:forEach>
 
결과 = ${sum}
cs


== step으로 증가하는 값을 설정할 수 있다.


2. int형 배열


1
<c:set var = "intArray" value = "<%= new int[]{1,2,3,4,5} %>"/>
cs


1
2
3
4
<h4>int형 배열</h4>
<c:forEach var ="i" items ="${intArray }" begin="2" end="4" varStatus="status">
    ${status.index } - ${status.count }-[${i }]
</c:forEach>
cs



== items에는 반드시 '집합데이터만' 들어가야하며,

이때 시작과 끝인 begin,end는 '인덱스 번호'를 지칭한다.

intArray에 저장된 {1,2,3,4,5}의 인덱스번호 2부터 시작해서 4로 끝나는것은

3,4,5를 꺼내겠다는 의미가 된다.  



3. Map


1
2
3
4
5
<%
    HashMap<String,Object> mapData = new HashMap<String,Object>();
    mapData.put("name","이름");
    mapData.put("today"new java.util.Date());
%>
cs


1. key - value를 가지는 HashMap객체를 선언후

put으로 key-value값을 가지는 두개의 데이터를 저장한다.


1
<c:set var = "map" value = "<%=mapData %>"/>
cs


2. EL태그로 사용할 수 있도록, mapData객체를 변수명 map으로 선언.


1
2
3
4
<h4>Map</h4>
<c:forEach var ="i" items = "${map}">
    ${i.key } = ${i.value }<br>
</c:forEach>
cs


3. EL태그의 map을 다시 foreach의 변수 i로 선언


== items에는 반드시 '집합데이터만' 들어가야하며,

HashMap을 저장하는 Map을 items로 저장할때에는

key - value 값이 쌍으로 저장된다.

EL태그로 쓸 변수명 i.key , i.value로 출력해올 수 있다.



- forToken


<c:forTokens /> Tag

- 문자열을 구분자(delimiter)로 분할

- <c:forTokens var="현재 아이템의 변수 명"

items="반복 데이터가 있는 아이템 Collection 명"

delims="구분자, 여러개 지정 가능"

begin="시작 값, 기본 값은 0"

end="종료 값"

step="증가 값"

varStatus="반복 상태 값을 지닌 변수" />



출처: http://hackersstudy.tistory.com/42 [공대인들이 직접쓰는 컴퓨터공부방]


예제)


1
2
3
4
5
6
<h4>콤마와 점을 구분자로 사용</h4>
<c:forTokens var = "token"
            items = "빨강색,주황색.노란색.초록색,파랑색,남색.보라색"
            delims = ",.">
    ${token}
</c:forTokens>
cs



== 구분자로 지정할것들을 delims = ""

큰따옴표 안에 다 넣어주면 된다.