본문 바로가기

개발자노트/웹

[리스너 클래스] + 커스텀태그 set / set target

리스너 클래스는 어떠한 행동을 모니터링하여 자동호출 한다고 했는데,

기본 생성자로 이미 만들어논 객체의 정보를 수정하려면 어떻게 해야할까?

 

 

Member의 핸드폰번호를 set target을 이용하여 수정하는 방법

 

 

Member.java 코드

package test;

public class Member {

		private String name;
		private String phone;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getPhone() {
			return phone;
		}
		public void setPhone(String phone) {
			this.phone = phone;
		}
		public Member() { // 기본 생성자 오버로딩
			name="김티오";
			phone="010-1234-1234";
		}
		public Member(String name,String phone) {
			this.name=name;
			this.phone=phone;
		}
}

코드를 보면 기본생성자로 김티오, 010-1234-1234로 생성이 되는 것을 볼 수 있다.

 

 

그리고 리스너 코드를 보면

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를 이용하여 application scope의 데이터를 가져와서

context.setAttribute로 "data" 라는 이름의 new Member() ( 기본생성자인 김티오, 010-1234,1234 ) 로 생성했다.

 

 

그리고 .jsp 코드를 보면

 

<%@ 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>리스너클래스 예제2</title>
</head>
<body>

<c:set var="msg" value="HELLO!" /> <!-- set을 이용해 EL식으로 변수 사용 가능 -->
<%-- <c:remove var="msg"/> --%> <!-- empty로 되어있고, remove를 이용해 이름이 msg인 변수를 지움 -->
${msg}

<hr>

<c:set target="${data}" property="phone" value="010-1122-3344	"></c:set>
			  <!-- data에 있는 phone이라는 속성을 value로 바꿔줘 -->
${data.name} | ${data.phone}
</body>
</html>

<c:set target="${data}" property="phone" value=010-1122-3344"> </c:set>

을 사용하여, data라는 이름에 대한 속성인 "phone" 의 값을 value="바꿀 내용"으로 set 해줄 수 있는 것을 볼 수 있다.

 

 

 

 

수행결과

기본생성자가 아닌 set된 번호로 바뀜