[JSTL] 반복문 - forEach

2025. 3. 19. 18:25·Web

 

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="cr" uri="http://java.sun.com/jsp/jstl/core"%>
<%
//String data[] = new String[] {"hong","kim","park"};

//request.setAttribute("data", data);

ArrayList <String> data = new ArrayList();
data.add("a");
data.add("b");
data.add("c");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 기초 문법3 (반복문 - foreach)</title>
</head>
<body>

<table border="1">
<tr>
<!-- 
forEach : JSTL 유일하게 배열 및 반복문으로 사용하는 속성 
var : 변수 
begin : 시작값
end : 종료값
-->

<%--
forEach 기본 형태 
<cr:forEach var="z" begin="1" end="5">
<td>${z}</td>
</cr:forEach>
--%>
 
<%--
items : 배열값을 받는 속성
	${data} setAttribute의 값
	<%=data%> : jsp 변수명
	
배열값을 사용하여 출력하는 역할
	begin = "0" 으로 시작!
	end 범위 더 크게 잡아도 에러 안남! 오 놀라워라 
--%> 
<cr:forEach var="z" items="<%=data%>" begin="0" end="5">

<cr:if test="${z !='b' }">
<td>${z}</td>
</cr:if>

</cr:forEach>

<%--
setAttribute로 가져온 경우 
<cr:forEach var="z" items="${data}">
<td>${z}</td>
</cr:forEach>
 --%>

</tr>
</table>

</body>
</html>

[기본적인 forEach 사용법]

<cr:forEach var="z" begin="1" end="5">
    <td>${z}</td>
</cr:forEach>
  • var : 반복 변수
  • begin : 시작 값
  • end : 종료 값

위 코드는 1부터 5까지 반복하며 <td> 태그 안에 숫자를 출력함

1.  배열 사용하기

JSTL의 forEach는 배열을 직접 반복할 수 있음

<%-- 배열을 request.setAttribute로 전달한 경우 --%>
<cr:forEach var="z" items="${data}">
    <td>${z}</td>
</cr:forEach>

2. JSP 변수(ArrayList) 사용하기

JSTL에서 JSP의 ArrayList를 직접 사용할 수도 있음

<%@page import="java.util.ArrayList"%>
<%
ArrayList<String> data = new ArrayList<>();
data.add("a");
data.add("b");
data.add("c");
%>

<cr:forEach var="z" items="<%=data%>">
    <td>${z}</td>
</cr:forEach>
  • items 속성에 <%=data%> 를 넣으면 JSP의 ArrayList 데이터를 반복 처리할 수 있음

3. 특정 값 제외하기

반복문을 돌면서 특정 값을 제외하려면 cr:if와 함께 사용하면 됨

<cr:forEach var="z" items="<%=data%>">
    <cr:if test="${z ne 'b'}">
        <td>${z}</td>
    </cr:if>
</cr:forEach>

위 코드는 리스트의 값 중 "b"를 제외하고 출력함

정리

  • JSTL의 forEach는 반복문을 처리하는 유일한 태그임
  • 기본적으로 begin, end 속성을 사용해 숫자 반복 가능함
  • 배열이나 ArrayList와 같은 컬렉션을 직접 사용할 수 있음
  • cr:if와 함께 사용하여 특정 값을 제외할 수도 있음

[2차 배열]

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="cr" uri="http://java.sun.com/jsp/jstl/core"%>
<%-- JSTL은 배열을 만드는 애가 없음 => JSP 이용 --%>
<%
String member[][] ={
		{"홍길동","강감찬","유관순"},
		{"A형","B형","O형"},
		{"24","43","15"}
};

ArrayList<ArrayList<String>> all = new ArrayList();

ArrayList<String> data = new ArrayList();
data.add("에어프라이어");
data.add("냉장고");
data.add("에어컨");
all.add(data);

ArrayList<String> data2 = new ArrayList();
data2.add("250000");
data2.add("350000");
data2.add("450000");
all.add(data2);

//out.print(all);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 기초 문법4 - (2차 반복문)</title>
</head>
<body>

<%-- v
arStatus : 배열번호 0~ => 이름.index 
--%>
<cr:set var="bb" value="<%=member[2]%>"></cr:set>
<cr:set var="aa" value="<%=member[1]%>"></cr:set>	<%-- 각 배열의 그룹번호 --%>
<cr:forEach var="cc" items="<%=member[0]%>" varStatus="no">
고객명 : ${cc}, 혈액형 : ${aa[no.index]}, 나이 : ${bb[no.index]}<br>
</cr:forEach>
<br><br><br>

<!-- Class 배열에 JSTL 출력 -->
<!-- 가격 데이터 전체 -->
<cr:set var="dd" value="<%=all.get(1)%>"/> 
<cr:forEach var="ee" items="<%=all.get(0)%>" varStatus="no">
번호 : ${no.index + 1} , 제품명 : ${ee}, 가격 : ${dd.get(no.index)} 원 <br>
</cr:forEach>

</body>
</html>

 

1. JSP에서 2차원 배열 생성

JSTL은 배열을 생성하는 기능이 없기 때문에 JSP 코드에서 배열을 선언하여 활용해야 함

String member[][] ={
        {"홍길동","강감찬","유관순"},
        {"A형","B형","O형"},
        {"24","43","15"}
};
  • member[0] : 고객명 목록
  • member[1] : 혈액형 목록
  • member[2] : 나이 목록

2. cr:set을 이용한 배열 저장

<cr:set var="bb" value="<%=member[2]%>"></cr:set>
<cr:set var="aa" value="<%=member[1]%>"></cr:set>

JSTL에서 배열을 직접 다루는 것이 어려우므로 JSP 배열을 cr:set을 통해 JSTL 변수에 저장한 후 사용함

3. cr:forEach를 이용한 반복문 처리

<cr:forEach var="cc" items="<%=member[0]%>" varStatus="no">
고객명 : ${cc}, 혈액형 : ${aa[no.index]}, 나이 : ${bb[no.index]}<br>
</cr:forEach>
  • items 속성에 member[0](고객명 리스트)를 전달하여 반복 실행
  • varStatus="no"를 사용하여 반복문의 현재 인덱스를 추적 가능
  • aa[no.index]와 bb[no.index]를 활용하여 해당 고객의 혈액형과 나이를 출력

3. 2차 클래스 배열 반복문 처리

  •  
<cr:set var="dd" value="<%=all.get(1)%>"/> 
<cr:forEach var="ee" items="<%=all.get(0)%>" varStatus="no">
    번호 : ${no.index + 1} , 제품명 : ${ee}, 가격 : ${dd.get(no.index)} 원 <br>
</cr:forEach>
  • <cr:set var="dd" value="<%=all.get(1)%>"/>
    • all.get(1) (가격 리스트) 를 dd 변수에 저장
  • <cr:forEach>를 이용하여 제품명 리스트를 반복 처리
    • items="<%=all.get(0)%>" : 제품명 리스트(all.get(0))를 반복문 대상으로 설정
    • var="ee" : 제품명 개별 데이터를 ee 변수로 저장
    • varStatus="no" : 반복문의 현재 index 값을 no.index로 활용 가능
    • ${dd.get(no.index)} : 현재 반복문의 index에 해당하는 가격 데이터를 가져옴

정리

  • JSTL은 배열을 직접 생성할 수 없기 때문에 JSP에서 배열을 생성 후 cr:forEach를 활용해야 함
  • varStatus="no"를 활용하면 반복문의 현재 인덱스를 가져와 2차원 배열의 값을 참조할 수 있음
  • 각 배열 값을 cr:set을 이용해 JSTL 변수에 저장한 후 사용하는 것이 편리함
저작자표시 비영리 변경금지 (새창열림)
'Web' 카테고리의 다른 글
  • [Spring] 미니프로젝트 세팅 - 부동산
  • [JSTL] DB 연결, 외부 페이지 로드
  • [JSTL] 조건문 - if문, choose문
  • [JSTL] set, session
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (25)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      spring-boot
      net2
      Oracle
      file25_t
      net4
      file25
      ab1
      net3
      exam1_1~10
      notice_writer
      datalist
      re2
      java_io1~10
      io_dto
      noticewriteok
      macbook pro m4
      net5~10
      re_java10
      file24
      net1
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    [JSTL] 반복문 - forEach
    상단으로

    티스토리툴바