[MVC 5-3] JSTL_Core - 흐름 제어 태그

임승현·2023년 1월 26일
0

MVC

목록 보기
22/27

🐧if 태그

📢if 태그 : 조건에 대한 결과에 따라 태그내용의 포함 여부를 선택하는 태그

📌test 속성 : false 또는 true 중 하나를 속성값으로 설정
→ test 속성값이 [false]인 경우 태그내용을 포함하지 않고 [true]인 경우에만 태그내용 포함
→ test 속성값으로 EL 연산자를 사용하여 false 또는 true 중 하나를 제공받아 사용 가능

📃core_if.jsp

※ webapp/jstl 폴더에 core_if.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<%-- if 태그 : 조건에 대한 결과에 따라 태그내용의 포함 여부를 선택하는 태그 --%>
	<%-- test 속성 : false 또는 true 중 하나를 속성값으로 설정 --%>
	<%-- → test 속성값이 [false]인 경우 태그내용을 포함하지 않고 [true]인 경우에만 태그내용 포함 --%>
	<%-- → test 속성값으로 EL 연산자를 사용하여 false 또는 true 중 하나를 제공받아 사용 가능 --%>
	<c:if test="true">
		<p>test 속성값이 [true]인 경우 태그 내용 출력-1</p>
	</c:if>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<c:if test="false">
		<p>test 속성값이 [true]인 경우 태그 내용 출력-2</p>
	</c:if>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<c:set var="sw" value="true"/>
	<%-- test 속성값으로 EL로 제공받은 스코프 속성값 사용 가능 --%>
	<c:if test="${sw }">
		<p>test 속성값이 [true]인 경우 태그 내용 출력-3</p>
	</c:if>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<c:set var="num" value="10"/>
	<%-- test 속성값으로 EL 사용시 EL 표현식에서 EL 연산자를 사용하여 false 또는 true 중 하나를 제공받아 사용 가능 --%>
	<c:if test="${num%2!=0 }">${num } = 홀수</c:if>
	<c:if test="${num%2==0 }">${num } = 짝수</c:if>
	<hr>
	<c:set var="num" value="11"/>
	<c:if test="${num mod 2 ne 0 }">${num } = 홀수</c:if>
	<c:if test="${num mod 2 eq 0 }">${num } = 짝수</c:if>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<c:set var="score" value="80"/>
	<c:if test="${score <= 100 && score >= 0 }">${score }점은 정상적인 점수입니다.</c:if>
	<c:if test="${score > 100 || score < 0 }">${score }점은 비정상적인 점수입니다.</c:if>
	<hr>
	<c:set var="score" value="800"/>
	<c:if test="${score le 100 and score ge 0 }">${score }점은 정상적인 점수입니다.</c:if>
	<c:if test="${score gt 100 or score lt 0 }">${score }점은 비정상적인 점수입니다.</c:if>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<c:set var="name" value="홍길동"/>
	<c:if test="${empty(name) }">
		<p>name 속성명으로 저장된 속성값은 없습니다.</p>
	</c:if>
	<c:if test="${!empty(name) }">
		<p>name 속성명으로 저장된 속성값은 [${name }]입니다.</p>
	</c:if>
</body>
</html>

🐧choose 태그

📢choose 태그 : 조건에 대한 결과에 따라 태그내용의 포함 여부를 선택하기 위한 상위 태그

→ 하위태그를 이용하여 태그내용의 포함 여부 선택
→ 하위태그 : when 태그(1개 이상), otherwise(0개 또는 1개) 태그
→ choose 태그에는 하위태그외에 다른 코드가 존재할 경우 에러 발생 - JSP 주석 예외

📢when 태그 : 조건에 대한 결과에 태그내용의 포함 여부를 선택하기 위한 태그

📌test 속성 : false 또는 true중 하나를 속성값으로 설정
→ test 속성값이 [false]인 경우 태그내용을 포함하지 않고 다음 when 태그 또는 otherwise 태그로 이동
→ test 속성값이 [true]인 경우 태그내용을 포함 후 choose 태그 종료

📢otherwise 태그 :

📃core_choose.jsp

※ webapp/jstl 폴더에 core_choose.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<c:set var="choice" value="1"/>
	<%-- choose 태그 : 조건에 대한 결과에 따라 태그내용의 포함 여부를 선택하기 위한 상위 태그 --%>
	<%-- → 하위태그를 이용하여 태그내용의 포함 여부 선택 --%>
	<%-- → 하위태그 : when 태그(1개 이상), otherwise(0개 또는 1개) 태그  --%>
	<%-- → choose 태그에는 하위태그외에 다른 코드가 존재할 경우 에러 발생 - JSP 주석 예외 --%>
	<c:choose>
		<%-- when 태그 : 조건에 대한 결과에 태그내용의 포함 여부를 선택하기 위한 태그  --%>
		<%-- test 속성 : false 또는 true중 하나를 속성값으로 설정 --%>
		<%-- → test 속성값이 [false]인 경우 태그내용을 포함하지 않고 다음 when 태그 또는 otherwise 태그로 이동 --%>
		<%-- → test 속성값이 [true]인 경우 태그내용을 포함 후 choose 태그 종료 --%>
		<c:when test="${choice == 1 }">
			<p>수성으로 이동합니다.</p>
		</c:when>
		<c:when test="${choice == 2 }">
			<p>금성으로 이동합니다.</p>
		</c:when>
		<c:when test="${choice == 3 }">
			<p>화성으로 이동합니다.</p>
		</c:when>
		<%-- ----------------------------------------------------------------------------------------------------- --%>
		<%-- otherwise 태그 : when 태그의 모든 조건이 거짓(false)인 경우 태그내용을 무조건 포함하기 위한 태그 --%>
		<c:otherwise>
			<p>지구로 이동합니다.</p>
		</c:otherwise>
	</c:choose>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<c:set var="num" value="10"/>
	<c:choose>
		<c:when test="${num % 2 != 0 }">${num } = 홀수</c:when>
		<c:otherwise>${num } = 짝수</c:otherwise>
	</c:choose>
</body>
</html>

💯choose 태그 예제

📃core_choose_form.jsp

※ webapp/jstl 폴더에 core_choose_form.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<form action="core_choose_action.jsp" method="post">
		점수입력 : <input type="text" name="score">
		<button type="submit">전송</button>
	</form>
</body>
</html>

📃core_choose_action.jsp

※ webapp/jstl 폴더에 core_choose_action.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<c:choose>
		<c:when test="${!empty(param.score) }"><%-- !empty : 비어있지 않다면 --%>
			<p>입력점수 = ${param.score }</p>
			<c:choose>
				<c:when test="${param.score <= 100 && param.score >= 90 }">
					<c:set var="grade" value="A"/>
				</c:when>
				<c:when test="${param.score <= 89 && param.score >= 80 }">
					<c:set var="grade" value="B"/>
				</c:when>
				<c:when test="${param.score <= 79 && param.score >= 70 }">
					<c:set var="grade" value="C"/>
				</c:when>
				<c:when test="${param.score <= 69 && param.score >= 60 }">
					<c:set var="grade" value="D"/>
				</c:when>
				<c:otherwise>
					<c:set var="grade" value="F"/>
				</c:otherwise>
			</c:choose>
			<p>${param.score }점은 ${grade }학점 입니다.</p>
		</c:when>
		<c:otherwise>
			<p style="color: red;">입력페이지에서 점수를 반드시 입력해 주세요.</p>
			<a href="core_choose_form.jsp">입력페이지 이동</a>
		</c:otherwise>
	</c:choose>
</body>
</html>

🐧forEach 태그(반복문)

📢forEach 태그 : 태그내용을 반복적으로 포함하기 위한 태그

📌var 속성 : 스코프 속성명을 속성값으로 설정
📌begin 속성 : 스코프 속성값으로 저장된 시작값(Integer)을 속성값으로 설정
📌end 속성 : 스코프 속성값으로 저장된 종료값(Integer)을 속성값으로 설정
📌step 속성 : 스코프 속성값의 증가값(Integer)을 속성값으로 설정

📃core_forEach.jsp

※ webapp/jstl 폴더에 core_forEach.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<%-- forEach 태그 : 태그내용을 반복적으로 포함하기 위한 태그 --%>
	<%-- var 속성 : 스코프 속성명을 속성값으로 설정 --%>
	<%-- begin 속성 : 스코프 속성값으로 저장된 시작값(Integer)을 속성값으로 설정 --%>
	<%-- end 속성 : 스코프 속성값으로 저장된 종료값(Integer)을 속성값으로 설정 --%>
	<%-- step 속성 : 스코프 속성값의 증가값(Integer)을 속성값으로 설정 --%>
	<c:forEach var="i" begin="1" end="5" step="1" >
		<p>${i }번째 출력되는 내용입니다.</p>
	</c:forEach>
	<hr>
	<%-- 1~100 범위의 정수들의 합계를 계산하여 출력 --%>
	<c:forEach var="i" begin="1" end="100" step="1">
		<c:set var="tot" value="${tot+i }"/>
	</c:forEach>
	<p>1~100 범위의 정수들의 합계 = ${tot }</p>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<%-- 구구단을 표(table) 형식으로 출력 --%>
	<table>
		<c:forEach var="i" begin="1" end="9" step="1">
			<tr>
			<c:forEach var="j" begin="2" end="9" step="1">
				<td width="100">${j} * ${i} = ${i*j}</td>
			</c:forEach>
		</c:forEach>
	</table>
</body>
</html>

💯forEach 태그 예제


📌var 속성 : 배열 또는 콜렉션 객체의 요소값을 제공받아 저장하기 위한 스코프 속성명을 속성값으로 설정
📌items 속성 : 반복 처리할 배열 또는 콜렉션 객체를 속성값으로 설정 - EL 사용

📃core_forEach_one.jsp

※ webapp/jstl 폴더에 core_forEach_one.jsp 생성

<%@page import="java.util.ArrayList"%>
<%@page import="xyz.itwill.el.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String[] nameArray={"홍길동","임꺽정","전우치","일지매","장길산"};
	request.setAttribute("nameArray", nameArray);
	//
	List<Student> studentList=new ArrayList<Student>();
	studentList.add(new Student(1000,"홍길동"));
	studentList.add(new Student(2000,"임꺽정"));
	studentList.add(new Student(3000,"전우치"));
	studentList.add(new Student(4000,"일지매"));
	studentList.add(new Student(5000,"장길산"));
	request.setAttribute("studentList", studentList);
	//
	request.getRequestDispatcher("core_forEach_two.jsp").forward(request, response);
%>

📃core_forEach_two.jsp

※ webapp/jstl 폴더에 core_forEach_two.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<ul>
		<li>${nameArray[0] }</li>
		<li>${nameArray[1] }</li>
		<li>${nameArray[2] }</li>
		<li>${nameArray[3] }</li>
		<li>${nameArray[4] }</li>
	</ul>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<%-- 일괄처리하는 방법 --%>
	<ul>
	<c:forEach var="i" begin="0" end="4" step="1">
		<li>${nameArray[i] }</li>
	</c:forEach>
	</ul>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<%-- forEach 태그를 사용하여 스코프 속성값으로 제공된 배열 또는 콜렉션 객체의 요소를 하나씩 얻어와 반복처리하는 기능 제공 --%>
	<%-- var 속성 : 배열 또는 콜렉션 객체의 요소값을 제공받아 저장하기 위한 스코프 속성명을 속성값으로 설정 --%>
	<%-- items 속성 : 반복 처리할 배열 또는 콜렉션 객체를 속성값으로 설정 - EL 사용 --%>
	<ul>
	<c:forEach var="name" items="${nameArray }">
		<li>${name }</li>
	</c:forEach>
	</ul>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<c:forEach var="student" items="${studentList }">
		<div>학번 = ${student.num }, 이름 = ${student.name }</div>
	</c:forEach>
</body>
</html>

🐧forTokens 태그

📢forTokens 태그 : 스코프 속성값으로 저장된 문자열(String 객체)을 특정 문자열로 분리하여 반복 처리하는 태그

📌items 속성 : 분리 처리하기 위한 문자열을 속성값으로 설정 - EL 사용 가능
📌delims 속성 : 문자열을 분리하기 위한 구분자를 속성값으로 설정
📌var 속성 : 분리된 문자열을 하나씩 얻어와 스코프 속성값으로 저장하기 위한 스코프 속성명을 속성값으로 설정

📃core_forTokens.jsp

※ webapp/jstl 폴더에 core_forTokens.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<c:set var="phone" value="010-1234-5678"/>
	<p>전화번호 = ${phone }</p>
	<hr>
	<%-- ----------------------------------------------------------------------------------------------------- --%>
	<%-- forTokens 태그 : 스코프 속성값으로 저장된 문자열(String 객체)을 특정 문자열로 분리하여 반복 처리하는 태그 --%>
	<%-- items 속성 : 분리 처리하기 위한 문자열을 속성값으로 설정 - EL 사용 가능 --%>
	<%-- delims 속성 : 문자열을 분리하기 위한 구분자를 속성값으로 설정 --%>
	<%-- var 속성 : 분리된 문자열을 하나씩 얻어와 스코프 속성값으로 저장하기 위한 스코프 속성명을 속성값으로 설정 --%>
	<c:forTokens items="${phone }" delims="-" var="num">
		<div>${num }</div>
	</c:forTokens>
</body>
</html>

0개의 댓글