커스텀 태그에서 for:each를 사용하는 방법이다.
우선 리스너 클래스를 사용해 서버의 시작을 감지해서
for문을 이용해 객체의 생성과 datas에 그 객체들을 넣는 작업까지 해주었다.
package test;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* Application Lifecycle Listener implementation class InitialMember
*
*/
@WebListener
public class InitialMember implements ServletContextListener {
/**
* Default constructor.
*/
public InitialMember() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
// 톰캣의 종료
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
// context == application scope
// 톰캣(서버,서블릿 컨테이너)의 시작을 감지(모니터링)
// 시작을 감지하면 아래의 내용을 수행
ArrayList<Member> datas=new ArrayList<Member>();
for (int i = 1; i<10; i++) {
Member data=new Member("홍길동"+i,"010,1234-567"+i);
datas.add(data);
}
datas.add(new Member("임꺽정",null));
datas.add(new Member("아무무",null));
ServletContext context=sce.getServletContext(); // application scope의 데이터를 가져와서
context.setAttribute("datas", datas); // 세팅해줌
context.setAttribute("data", new Member());
}
}
그리고 ServletContext 를 사용하여 context.setAttribute로 ("datas", datas); 로 datas라는 이름으로 datas를 세팅해줬다.
그 후 .jsp 파일에서는 < c: foreach > 를 사용하여 datas의 정보들을 꺼내서 확인해 볼 것인데,
items 에는 스코프에 set 해놓은 datas를 써주면 되고, begin과 end는 말 그대로 시작과 끝값을 지정해주면 된다.
그리고 varStatus=는 변수에 대한 정보를 볼 수 있는데,
status.index는 배열의 index 처럼 0부터 시작되고,
status.count는 지금까지 출력된 갯수를 카운트 해준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>for</title>
</head>
<body>
<c:forEach var="v" items="${datas}" begin="0" end="3" varStatus="status">
index: ${status.index}<br>
count: ${status.count}<br>
${v.name} | ${v.phone}<hr>
</c:forEach>
<hr>
<c:forTokens items="사과,바나나,키위" delims="," var="v">
<!-- 필수속성 items="값" delims="구분자" var="변수명" -->
${v} <br>
<!-- 흔히 사용되진 않지만 외부기사,등을 가져와서 띄울 때 사용하면 좋음 -->
</c:forTokens>
</body>
</html>
그리고 forTokens는 item에 들어갈 값(내용) 을 적어주고
delims=" " 에는 구분자 여기서는 각각의 items들이 ( , ) 로 구분되어 있는 것을 볼 수 있다.
이러한 구분자를 기준으로 for문이 출력되게 된다.
수행결과
위에서 말햇듯, index는 0부터 시작되고 count는 1부터 시작된다.
그리고 begin / end 값을 지정해놓아서
리스너클래스에서 set 해준 datas 에는 i=1 ; i < 10 ; i++; 로 9개의 객체를 만들었음에도
인덱스 0~3까지 출력이 된 것을 볼 수 있고
forTokens 를 사용해 구분자를 구별해서 각 내용들을 각각 출력한 것을 볼 수 있다.
'개발자노트 > 웹' 카테고리의 다른 글
HTML - JSP - 커스텀태그를 사용해 EL식 , JSTL 사용 (0) | 2022.08.16 |
---|---|
HTML - JSP - 커스텀태그 import / redirect / url (0) | 2022.08.16 |
HTML - JSP - 커스텀태그 choose / when / otherwise / 삼항연산자 (0) | 2022.08.16 |
HTML - JSP - 커스텀태그 try-catch , 조건문 if (0) | 2022.08.16 |
HTML - JSP - [JSTL] 기본개념 (0) | 2022.08.16 |