for문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- JSTL core 라이브러리를 c 라는 접두어로 사용할 준비하기 --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/jstl/test01.jsp</title>
</head>
<body>
<h3>JSTL (Java Standard Tag Library) 사용하기 </h3>
<c:forEach var="i" begin="1" end="5">
<p>${i }</p>
</c:forEach>
</body>
</html>
|
cs |
4행 : taglib 지시자로 core 라이브러리를 사용할 것이라고 선언한다.
13-15행 : java의 반복문과 동일한 역할을 한다.
for(var i=1; i<=5; i++){ } begin속성에는 시작할 data, end에는 마지막으로 출력할 data를 작성한다.
확장 for문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
// Model (data)
List<String> names=new ArrayList<>();
names.add("김구라");
names.add("해골");
names.add("원숭이");
//request 영역에 담기
request.setAttribute("names", names);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/jstl/test02.jsp</title>
</head>
<body>
<h3>forEach 활용</h3>
<h4>친구 목록 입니다.</h4>
<ul>
<c:forEach var="tmp" items="${requestScope.names }">
<li>${tmp }</li>
</c:forEach>
</ul>
</body>
</html>
|
cs |
4-10행 : Servlet 에 있는 내용이라고 가정하자. list 객체를 생성해 names 변수에 담고, "김구라, 해골, 원숭이"를 가변배열에 담았다. request 객체를 이용해 "names"라는 key값으로 names 가변배열 객체의 참조값을 value에 저장했다. 이에 대한 응답은 JSP페이지에서 한다.
22-24 행 : names 가변배열에 담겨있는 "김구라, 해골, 원숭이"를 JSP 페이지에서 반복문을 돌면서 출력한다.
for(String tmp:names){ }의 확장 for문과 동일하게 동작한다. items 속성 값으로는 request객체에 담겨 있는 key값을 이용해 value값을 불러온다.
[예시]
List<CafeDto> list=CafeDao.getInstance().getList(dto);
에서 배열의 방에 저장되어있는 dto 객체들을 불러와서 필드에 담겨있는 내용을 반복문 돌면서 출력하고자 한다.
기존에는 jsp 페이지에서는 아래와 같이 코드를 작성해주어야했다.
이것을 EL과 JSTL 라이브러리를 사용해서 간단한 코드로 바꿔보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<tbody>
<%for(CafeDto tmp:list){ %>
<tr>
<td><%=tmp.getNum() %></td>
<td><%=tmp.getWriter() %></td>
<td>
<a href="detail.jsp?num=<%=tmp.getNum() %>">
<%=tmp.getTitle() %>
</a>
</td>
<td><%=tmp.getViewCount() %></td>
<td><%=tmp.getRegdate() %></td>
</tr>
<%} %>
</tbody>
|
cs |
[ EL과 JSTL 라이브러리 사용해서 변경한 코드]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<tbody>
<c:forEach var="tmp" items="${requestScope.list }">
<tr>
<td>${tmp.num }</td>
<td>${tmp.writer }</td>
<td>
<a href="detail.jsp?num=${tmp.num }">
${tmp.title }
</a>
</td>
<td>${tmp.viewCount }</td>
<td>${tmp.regdate }</td>
</tr>
</c:forEach>
</tbody>
|
cs |
dto 객체의 필드 값을 참조하고 싶다면 ${변수명.필드명 }을 작성해주면 된다.
for문 varStatus 속성
varStatus="status" 속성과 값을 사용 하면 index, 배열안의 data 개수 및 순서, boolean 등 다양한 값을 받아 볼 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
// Model (data)
List<String> names=new ArrayList<>();
names.add("김구라");
names.add("해골");
names.add("원숭이");
//request 영역에 담기
request.setAttribute("names", names);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/jstl/test02.jsp</title>
</head>
<body>
<h3>forEach 활용</h3>
<h4>친구 목록 입니다.</h4>
<ul>
<c:forEach var="tmp" items="${requestScope.names }"
varStatus="status">
<li>
<%-- index 값을 알 수 있다. --%>
status.index : <strong>${status.index }</strong>
<%-- 순서 혹은 갯수를 알고 싶은 경우 --%>
status.count : <strong>${status.count}</strong>
<%-- 배열의 가장 첫번째 값을 알고 싶은 경우 --%>
status.first : <strong>${status.first }</strong>
<%-- 배열의 가장 마지막번째 값을 알고 싶은 경우 --%>
status.last : <strong>${status.last }</strong>
${tmp }
</li>
</c:forEach>
</ul>
</body>
</html>
|
cs |
[예시]
배열에 kim, lee, park, jung을 넣고, kim | lee | park | jung 모양으로 출력해보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<h3>kim | lee | park | jung 으로 출력하기</h3>
<ul class="one">
<c:forEach var="tmp" items="${requestScope.lastNames }" varStatus="status">
<c:choose>
<c:when test="${status.last }">
<li>
${tmp }
</li>
</c:when>
<c:otherwise>
<li>
${tmp } |
</li>
</c:otherwise>
</c:choose>
</c:forEach>
</ul>
|
cs |
kim, lee, park 을 출력할때는 | 를 함께 출력하고 배열안의 마지막 data인 jung을 출력할때는 | 를 출력하지 않으면 된다.
if~else 문과 EL을 사용해서 ${status.last }가 true가 되면 ${tmp }를 출력하고 ${tmp } | 를 출력하면 된다.
'Servlet&JSP' 카테고리의 다른 글
ContextPath 란? (0) | 2020.02.01 |
---|---|
[JSP/JSTL] JSTL 개요 / JSTL 불러오기 (0) | 2020.01.21 |
[MVC] EL, forward, redirect 사용 해보기 / DTO에 담겨 있는 내용 출력 (0) | 2020.01.21 |
[JSP] EL(Expression Language) - 산술, 비교, 논리, empty 연산 (0) | 2020.01.21 |
[비동기 통신] AJAX 통신 / Form 유효성 검증 (0) | 2020.01.13 |