본문 바로가기
Dev/Java

JSTL - 코어 태그 2 (if, choose, forEach, forTokens)

by vellahw 2022. 9. 22.

 

https://tavi.tistory.com/35

 

JSTL - 코어 태그 <c:set>, <c:remove>

코어 태그 라이브러리는 if-else나 변수의 지정등과 같이 논리적인 처리를 위해 사용되는 스크립트 코드를 대체하기 위한 태그를 제공한다. 코어 태그 라이브러리 기능 분류 태그 변수지원 set remo

tavi.tistory.com

 


 

2. 흐름 제어 태그 - if, choose, forEach, forTokens

 

 2-1. <c:if> 태그 - 조건

자바 언어의 if 블록과 비슷한 기능을 제공한다.

 

<c:if test="조건">
...
</c:if>

test 속성에는 ture나 false를 리턴하는 조건문이 오는데 조건이 true일 경우 몸체 내용이 실행된다.

 

*예제

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>if 태그</title>
</head>
<body>
<c:if test="true">
무조건 수행 <br/>
</c:if>

<c:if test="${param.name == 'cd'}">
name 파라미터 값이 ${param.name} 입니다. <br/>
</c:if>

<c:if test="${18 < param.age}">
당신의 나이는 18세 이상입니다.
</c:if>
</body>
</html>

첫 실행 결과

첫번째 <c:if> 태그는 조건문이 true이기 때문에 항상 실행 된다.

 

url에 name, age 파라미터 값을 전달하고 실행하면 다음과 같은 결과를 얻을 수 있다.

 

 

 2-2. <c:choeos>, <c:when>, <c:otherwise> 태그

 자바의 switch-case-defult 태그와 동일하다.

*예제

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<html>
<head>
<title>choose 태그</title>
</head>
<body>
<ul>
<c:choose>
	<c:when test="${param.name == 'cd'}">
		<li> 당신의 이름은 ${param.name} 입니다.
	</c:when>
	<c:when test="${param.age > 20}">
		<li> 당신은 20세 이상입니다.
	</c:when>
	<c:otherwise>
		<li> 당신은 'cd'가 아니고 20세 이상이 아닙니다.
	</c:otherwise>
</c:choose>
</ul>
</body>
</html>

파라미터를 입력하지 않은 결과

 

name, age 파라미터 값을 입력한 결과

만약 <c:when> 조건이 하나라도 충족되면 <c:otherwise> 태그는 수행 되지 않는다.

 

 

 2-3. <c:forEach> - 반복

배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리할 수 있는 태그로서,

자바의 for-, do-while 등을 대신해서 사용 할 수 있다.

 

1) 집합이나 콜렉션 데이터 사용: items 속성에 올 수 있는 것들로는 Map, 배열, Collection이 있다.

<c:forEach var="변수" items="아이템">
... ${변수사용} ...
</c:forEach>

 

 2) 특정 회수 반복: begin과 end 속성을 통해 범위를 지정해서 사용할 수 있다.

<c:forEach var="1" begin="1" end="10" [step="값"]>
${i}사용
</c:forEach>

 step 속성을 사용하면 증가분을 변경 할 수 있다. 

 

 3) varStatus 속성 

<c:forEach var="item" items="<%=someItemList%>" varStatus="status">
${status.index +1}번째 항목: ${item.name}
</c:forEach>

List와 같은 컬렉션이나 배열을 이용해서 <c:forEach> 태그를 사용할 때 현재 사용되는 항목의 인덱스 값을 사용해야 하는 경우 varStatus 속성을 이용해서 인덱스 등의 값을 사용할 수 있다.

 

*예제1) 1부터 100까지 홀수의 합 구하기

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.util.HashMap"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<html>
<head>
<title>forEach 태그</title>
</head>
<body>
<h4>1부터 100까지 홀수의 합</h4>
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="100" step="2"> <!-- i는 1부터 100까지 2씩 증가하면서 반복 -->
<c:set var="sum" value="${sum + i}" /> <!-- EL에 넣어 연산 -->
</c:forEach>
결과 = ${sum}
</body>
</html>

실행 결과

 

*예제2) 구구단 4단 (위 예제와 같은 페이지에서 작성함)

<h4>구구단: 4단</h4>
<ul>
<c:forEach var="i" begin="1" end="9"> <!-- i는 1부터 9까지 -->
	<li> 4 * ${i} = ${ 4 * i }
</c:forEach>

실행 결과

 

*예제3) 배열의 인덱스-횟수-해당 인덱스의 [값] 출력 (위 예제와 같은 페이지에서 작성함)

...
<c:set var="intArray" value="<%= new int[] {1, 2, 3, 4, 5} %>" />
<body>
.
.
.
<h4>int형 배열</h4>
<c:forEach var="i" items="${intArray}" begin="2" end="4" varStatus="status">
<!-- i에 intArray 배열의 2번째부터 4번째까지의 인덱스를 저장, 루프 상태 값을 status에 저장-->
	${status.index}-${status.count}-${[i]} <br/>
</c:forEach>

실행결과

${status.index} : 2/3/4 번째 인덱스

${status.count} : 첫 번째/두 번째/세 번째 반복

${ [ i ] } : 배열에 있는 값 int[3], int[4], int[5]

 

*예제4) Map에 저장된 키와 값 출력 (위 예제와 같은 페이지에서 작성함)

...
<%
	HashMap<String, Object> mapData = new HashMap<String, Object>();
	mapData.put("name", "코딩코"); //키:name 값:코딩코
	mapData.put("today", new java.util.Date()); //키:today 값:Date로 받아옴
%>	
<c:set var="map" value="<%= mapData %>" />
...
<body>
.
.
.
<h4>Map</h4>
<c:forEach var="i" items="${map}">
	${i.key} = ${i.value} <br/> 
</c:forEach>

실행 결과

 

 

 

 2-4. <c:forTokens> 태그

java.util.StringTokenizer 클래스와 같은 기능을 제공함

<c:forTokens var="token" items="문자열" delims="구분자">
 ${token}의 사용
</c:forTokens>

items 속성으로 전달받은 문자열을 구분자를 이용해서 나눈 뒤, 나뉘어진 문자열을 var 속성에 명시한 변수에 저장한다.

 

*예제

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!DOCTYPE html>
<html>
<head>
<title>forTokens 태그</title>
</head>
<body>

콤마와 점을 구분자로 사용:<br>
<c:forTokens var="token"
		items="빨간색,주황색.노란색.초록색,파란색,남색.보라색"
		delims=",." >
${token}
</c:forTokens>
</body>
</html>

 

실행 결과

 

 

 

댓글