[SPRING] 6장. 데이터 전달자 모델

jychae·2022년 12월 6일
0

스프링

목록 보기
12/12

1. 모델객체

Model 객체는 뷰(View)에 컨트롤러에서 생성된 데이터를 담아서 전달하는 역할을 한다.

1. Model 객체의 addAttribute()메서드를 호출하여 데이터를 전달한다.

[요청과 처리]
요청 : /
처리 : home(Locale locale, Model model)
model.addAttribute("serverTime", formatterDate)

2. 모델을 통한 데이터 전달

Model 객체를 통해서 다양한 데이터를 뷰(View)에 전달할 수 있다.

1. 매개변수에 선언된 Model 객체의 addAttribute() 메서드를 호출하여 데이터를 뷰(View)에 전달한다.

[요청과 처리]
요청 : /read01
처리 : String read01(Model model)
model.addAttribute("userId", "hongkd");
model.addAttribute("password", "1234");
model.addAttribute("email", "aaa@ccc.com");
...

2. Model 객체에 자바빈즈 클래스 객체를 값으로만 전달할 때는 뷰에서 참조할 이름을 클래스명의 앞글자를 소문자로 변화하여 처리한다

[요청과 처리]
요청 : /read02
처리 : String read02(Model model)
model.addAttribute(member);

3. Model 객체에 자바빈즈 클래스 객체를 특정한 이름을 지정하여 전달할 수 있다.

[요청과 처리]
요청 : /read03
처리 : String read01(Model model)
model.addAttribute("user", member);

4. Model 객체를 통해 배열과 컬렉션 객체를 전달할 수 있다.

[요청과 처리]
요청 : /read04
처리 : String read01(Model model)
model.addAttribute("carArray", carArray);
model.addAttribute("carList", carList);
....

5. Model 객체를 통해 중첩된 자바빈즈 클래스 객체를 전달할 수 있다.

[요청과 처리]
요청 : /read05
처리 : String read05(Model model)
model.addAttribute("user", member);

6. Model 객체를 통해 다양한 타입의 값을 전달할 수 있다.

[요청과 처리]
요청 : /read06
처리 : String read06(Model model)
model.addAttribute("user", member);

3. @ModelAttribute 어노테이션

@ModelAttribute 어노테이션은 전달 받은 매개변수를 강제로 Model에 담아서 전달하도록 할 때 필요한 어노테이션입니다.

1. 기본자료형은 매개변로 선언하더라도 기본적으로 전달되지 않는다.

[요청과 처리]
요청 : /modelattribute/register01
처리 : String register01(String userId)
- 기본 타입의 매개변수는 페이지로 전달되지 않는다.

2. 기본 자료형인 매개변수에 @ModelAttribute 어노테이션을 지정하여 데이터를 전달한다.

[요청과 처리]
요청 : /modelattribute/register02
처리 : String register02(@ModelAttribute("userId") String userId)
- @ModelAttribute 어노테이션을 이용해서 데이터를 전달한다

3. 기본 자료형인 매개변수가 여러 개인 경우 각각의 매개변수에 @ModelAttribute 어노테이션을 지정하여 데이터를 전달한다.

[요청과 처리]
요청 : /modelattribute/register03
처리 : String register03(@ModelAttribute("userId") String userId, @ModelAttribute("password") String password )

4. 자바빈즈 규칙에 맞는 객체는 매개변수로 선언하면 기본적으로 전달된다

[요청과 처리]
요청 : /modelattribute/register04
처리 : String register04(Member member)

5. 자바빈즈 규칙에 맞는 객체는 매개변수로 선언하면 기본적으로 전달된다 (2)

[요청과 처리]
요청 : /modelattribute/register05
처리 : String register05(Member member)
- Member 클래스 안에 있는 Address까지 출력 예시

4. RedirectAttributes 타입

RedirectAttributes는 일회성으로 데이터를 전달하는 용도로 사용된다.

1. RedirectAttributes 객체에 일회서 데이터를 지정하여 전달한다.

[요청과 처리]
요청 : /redirectAttribute/register
처리 : String register(Member member, RedirectAttributes redirectAttributes)
- 일회성으로 해당 페이지에서 넘어온 데이터를 다시 요청할 시 데이터가 사라진다.


ModelMemberController

package org.hdcd.controller;

import java.time.Year;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.hdcd.vo.Address;
import org.hdcd.vo.Card;
import org.hdcd.vo.Member;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class ModelMemberController {
	
	private static Logger logger = LoggerFactory.getLogger(AjaxMemberFileController.class);
	/*
	 * 6장. 데이터 전달자 모델
	 * - Model 객체 이용
	 * 1) 매개변수에 선언된 Model 객체의 addAttribute() 메서드를 호출하여 데이터를 뷰(View)에 전달한다.
	 */
	@RequestMapping(value = "/read01", method = RequestMethod.GET)
	public String read01(Model model) {
		logger.info("read01");
		model.addAttribute("userId", "hongkd");
		model.addAttribute("password", "1234");
		model.addAttribute("email", "aaa@ccc.com");
		model.addAttribute("userName", "홍길동");
		model.addAttribute("birthDay", "2022-11-28");
		return "member/read01";
	}
	
	// 2) Model 객체에 자바빈즈 클래스 객체를 값으로만 전달할 때는 
	// 뷰에서 참조할 이름을 클래스명의 앞글자를 소문자로 변환하여 처리한다.
	@RequestMapping(value = "/read02", method = RequestMethod.GET)
	public String read02(Model model) {
		logger.info("read02");
		
		Member member = new Member();
		member.setUserId("hongkd");
		member.setPassword("1234");
		member.setEmail("aaa@ccc.com");
		member.setUserName("홍길동");
		member.setBirthDay("2022-11-28");
		
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, 2020);
		cal.set(Calendar.MONDAY, 10);
		cal.set(Calendar.DAY_OF_MONTH, 7);
		
		member.setDateOfBirth(cal.getTime());
		model.addAttribute(member);
		return "member/read02";
	}
	
	// 3) Model 객체에 자바빈즈 클래스 객체를 특정한 이름을 지정하여 전달할 수 있다
	@RequestMapping(value = "/read03", method = RequestMethod.GET)
	public String read03(Model model) {
		logger.info("read03");
		
		Member member = new Member();
		member.setUserId("hongkd");
		member.setPassword("1234");
		member.setEmail("aaa@ccc.com");
		member.setUserName("홍길동");
		member.setBirthDay("2022-11-28");
		
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, 2020);
		cal.set(Calendar.MONDAY, 10);
		cal.set(Calendar.DAY_OF_MONTH, 7);
		
		member.setDateOfBirth(cal.getTime());
		model.addAttribute("user", member);
		
		return "member/read03";
	}
	
	// 4) Model 객체를 통해 배열과 컬렉션 객체를 전달할 수 있다
	@RequestMapping(value = "/read04", method = RequestMethod.GET)
	public String read04(Model model) {
		logger.info("read04");
		
		String[] carArray = {"jeep", "bmw"};
		
		List<String> carList = new ArrayList<String>();
		carList.add("jeep");
		carList.add("bmw");
		
		String[] hobbyArray = {"Music", "Movie"};

		List<String> hobbyList = new ArrayList<String>();
		hobbyList.add("Music");
		hobbyList.add("Movie");
		
		model.addAttribute("carArray", carArray);
		model.addAttribute("carList", carList);
		model.addAttribute("hobbyArray", hobbyArray);
		model.addAttribute("hobbyList", hobbyList);
		
		return "member/read04";
	}
	
	// 5) Model 객체를 통해 중첩된 자바빈즈 객체를 전달할 수 있다
	@RequestMapping(value = "/read05", method = RequestMethod.GET)
	public String read05(Model model) {
		logger.info("read05");
		
		Member member = new Member();
		
		Address address = new Address();
		address.setPostCode("080908");
		address.setLocation("seoul");;
		
		member.setAddress(address);
		
		List<Card> cardList = new ArrayList<Card>();
		Card card1 = new Card();
		card1.setNo("123456");
		
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, 2020);
		cal.set(Calendar.MONTH, 9);
		cal.set(Calendar.DAY_OF_MONTH, 8);
		card1.setValidMonth(cal.getTime());
		cardList.add(card1);
		
		Card card2 = new Card();
		card2.setNo("456789");
		
		cal.set(Calendar.YEAR, 2021);
		cal.set(Calendar.MONTH, 11);
		cal.set(Calendar.DAY_OF_MONTH, 7);
		card2.setValidMonth(cal.getTime());
		cardList.add(card2);
		
		member.setCardList(cardList);
		model.addAttribute("user", member);

		return "member/read05";
	}
	
	// 6) Model 객체를 통해 다양한 타입의 값을 전달할 수 있다.
	@RequestMapping(value = "/read06", method = RequestMethod.GET)
	public String read06(Model model) {
		logger.info("read06");
		
		Member member = new Member();
		member.setUserId("hongkd");
		member.setPassword("1234");
		member.setEmail("aaa@ccc.com");
		member.setUserName("홍길동");
		member.setBirthDay("2022-11-28");
		member.setGender("male");
		member.setDeveloper("Y");
		member.setForeigner(true);
		member.setNationality("Canada");
		member.setCars("jeep");
		member.setHobby("Sports");
		
		String[] carArray = { "jeep", "bmw" };
		member.setCarArray(carArray);
		
		List<String> carList = new ArrayList<String>();
		carList.add("jeep");
		carList.add("bmw");
		member.setCarList(carList);
		
		String[] hobbyArray = {"Music", "Movie"};
		member.setHobbyArray(hobbyArray);
		
		List<String> hobbyList = new ArrayList<String>();
		hobbyList.add("Music");
		hobbyList.add("Movie");
		member.setHobbyList(hobbyList);
		
		Address address = new Address();
		address.setPostCode("090890");
		address.setLocation("Daejeon");
		member.setAddress(address);
		
		List<Card> cardList = new ArrayList<Card>();
		Card card1 = new Card();
		card1.setNo("123456");
		
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, 2020);
		cal.set(Calendar.MONTH, 9);
		cal.set(Calendar.DAY_OF_MONTH, 8);
		card1.setValidMonth(cal.getTime());
		cardList.add(card1);
		
		Card card2 = new Card();
		card1.setNo("456789");
		
		cal.set(Calendar.YEAR, 1999);
		cal.set(Calendar.MONTH, 10);
		cal.set(Calendar.DAY_OF_MONTH, 7);
		card2.setValidMonth(cal.getTime());
		cardList.add(card2);
		
		member.setCardList(cardList);
		cal.set(Calendar.YEAR, 1999);
		cal.set(Calendar.MONTH, 11);
		cal.set(Calendar.DAY_OF_MONTH, 2);
		
		member.setDateOfBirth(cal.getTime());
		
		String introduction = "안녕하세요\n 반갑습니다.";
		member.setIntroduction(introduction);
		model.addAttribute("user", member);
				
		return "member/read06";
	}
	
	
	
	
	
	
	
	
	
    
}

read01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>read01 20221128</title>
</head>
<body>
	<h3>1) 매개변수에 선언된 Model 객체의 addAttribute()메서드를 호출하여 데이터를 뷰(View)에 전달한다.</h3>
	
	<p>Result</p>
	userId : ${userId } <br/> 
	password : ${password } <br/> 
	userName : ${userName } <br/> 
	email : ${email } <br/> 
	birthDay : ${birthDay } <br/> 
	
</body>
</html>

read02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>read02 20221128</title>
</head>
<body>
	<h3>
		2) Model 객체에 자바빈즈 클래스 객체를 값으로만 전달할 때는 
		뷰에서 참조할 이름을 클래스명의 앞글자를 소문자로 변환하여 처리한다.
	</h3>
	
	<p>Result</p>
	member.userId : ${member.userId } <br/> 
	member.password : ${member.password } <br/> 
	member.userName : ${member.userName } <br/> 
	member.email : ${member.email } <br/> 
	member.birthDay : ${member.birthDay } <br/> 
	member.dateOfBirth : ${member.dateOfBirth } <br/> 
	
</body>
</html>

read03.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>read03 20221128</title>
</head>
<body>
	<h3>
		3) Model 객체에 자바빈즈 클래스 객체를 특정한 이름을 지정하여 전달할 수 있다
	</h3>
	
	<p>Result</p>
	user.userId : ${user.userId } <br/> 
	user.password : ${user.password } <br/> 
	user.userName : ${user.userName } <br/> 
	user.email : ${user.email } <br/> 
	user.birthDay : ${user.birthDay } <br/> 
	user.dateOfBirth : ${user.dateOfBirth } <br/> 
	
</body>
</html>

read04.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>read04 20221128</title>
</head>
<body>
	<h3>
		4) Model 객체를 통해 배열과 컬렉션 객체를 전달할 수 있다
	</h3>
	
	<p>Result</p>
	
	<h4>hobbyArray : </h4>
	<c:forEach items="${hobbyArray }" var="hobby"> 
		<c:out value="${hobby }"/>
	</c:forEach>
	
	<h4>hobbyList : </h4>
	<c:forEach items="${hobbyList }" var="hobby"> 
		<c:out value="${hobby }"/>
	</c:forEach>
	
	<h4>carArray : </h4>
	<c:forEach items="${carArray }" var="car"> 
		<c:out value="${car }"/>
	</c:forEach>
	
	<h4>carList : </h4>
	<c:forEach items="${carList }" var="car"> 
		<c:out value="${car }"/>
	</c:forEach>
	
</body>
</html>

read05.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>read05 20221128</title>
</head>
<body>
	<h3>
		5) Model 객체를 통해 중첩된 자바빈즈 객체를 전달할 수 있다
	</h3>
	
	<h4>user.address :</h4>
	user.address.postCode : ${user.address.postCode }<br/>
	user.address.location : ${user.address.location }<br/>
	<hr/>
	
	<h4>user.cardList :</h4>
	<c:forEach items="${user.cardList }" var="card"> 
		<c:out value="${card.no } ${card.validMonth }"/>
	</c:forEach>
	<br/><br/>
	
	<c:forEach items="${user.cardList }" var="card"> 
		<c:out value="${card.no }"/> <br/>
		<c:out value="${card.validMonth }"/> <br/>
	</c:forEach>
	<br/>
	
	<c:forEach items="${user.cardList }" var="card"> 
		${card.no } ${card.validMonth } <br/>
	</c:forEach>
	
	
</body>
</html>

read06.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>read06 20221128</title>
</head>
<body>
	<h3>
		6) Model 객체를 통해 다양한 타입의 값을 전달할 수 있다.
	</h3>
	

	user.userId : ${user.userId }<br/>
	user.password : ${user.password }<br/>
	user.userName : ${user.userName }<br/>
	user.email : ${user.email }<br/>
	user.birthDay : ${user.birthDay }<br/>
	user.gender : ${user.gender }<br/>
	user.hobby : ${user.hobby }<br/>
	
	<c:forEach items="${user.hobbyArray }" var="hobby"> 
		<c:out value="${hobby }"/> <br/>
	</c:forEach>
	<br/>
	
	<c:forEach items="${user.hobbyList }" var="hobby"> 
		<c:out value="${hobby }"/> <br/>
	</c:forEach>
	<br/>
	
	user.foreigner : ${user.foreigner }<br/>
	user.developer : ${user.developer }<br/>
	user.nationality : ${user.nationality }<br/>
	user.address.postCode : ${user.address.postCode }<br/>
	user.address.location : ${user.address.location }<br/>
	
	<c:forEach items="${user.cardList }" var="card"> 
		<c:out value="${card.no } ${card.validMonth }"/> <br/>
	</c:forEach>
	<br/>
	
	<c:forEach items="${user.cardList }" var="card"> 
		<c:out value="${card.no }"/> <br/>
		<c:out value="${card.validMonth }"/> <br/>
	</c:forEach>
	<br/>
	
	<c:forEach items="${user.cardList }" var="card"> 
		${card.no } ${card.validMonth } <br/>
	</c:forEach>
	<br/>
	
	user.cars : ${user.cars } <br/>
	
	<c:forEach items="${user.carArray }" var="car"> 
		${car } <br/>
	</c:forEach>
	<br/>
	
	<c:forEach items="${user.carList }" var="car"> 
		${car } <br/>
	</c:forEach>
	<br/>
	
	user.introduction : ${user.introduction }<br/>
	user.dateOfBirth : ${user.dateOfBirth }<br/>
	
</body>
</html>

ModelAttributeMemberController

package org.hdcd.controller;

import org.hdcd.vo.Member;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class ModelAttributeMemberController {
	
	private static final Logger logger = LoggerFactory.getLogger(ModelAttributeMemberController.class);
	
	/*
	 * 3. @ModelAttribute 어노테이션
	 * - @ModelAttribute 어노테이션은 전달받은 매개변수를 강제로 Model에 담아서 전달하도록 할대 필요한 어노테이션이다. 
	 */
	
	// 3번 @ModelAttribute 어노테이션입력 Form 페이지
	@RequestMapping(value = "/modelattribute/registerForm", method = RequestMethod.GET)
	public String registerForm() {
		logger.info("registerForm");
		return "member/registerModelAttributeForm";
	}
	
	// 1)  기본 자료형은 매개변수로 선언하더라고 기본적으로 전달되지 않는다.
	@RequestMapping(value = "/modelattribute/register01", method = RequestMethod.POST)
	public String register01(String userId) { //String userId 매개변수는 return "result"전달 놉
		// 매개변수로 기본 자료형을 선언하더라도 결과 페이지로 전달되지 않는다.
		logger.info("register01");
		logger.info("userId : " + userId);
		return "result";
	}
	
	// 2) 기본 자료형인 매개변수에  @ModelAttribute 어노테이션을 지정하여 데이터를 전달한다.
	@RequestMapping(value = "/modelattribute/register02", method = RequestMethod.POST)
	public String register02(@ModelAttribute("userId") String userId) { 
		// 모델 설정 안해도 ! 넘어감 이 @ModelAttribute 어노테이션 사용시
		logger.info("register02");
		logger.info("userId : " + userId);
		return "result";
	}
	
	// 3) 기본 자료형인 매개변수가 여러 개인 경우 각각의 매개변수에 @ModelAttribute 어노테이션을 지정하여 데이터를 전달한다.
	@RequestMapping(value = "/modelattribute/register03", method = RequestMethod.POST)
	public String register03(@ModelAttribute("userId") String userId, 
							 @ModelAttribute("password") String password ) { 
		// @ModelAttribute 어노테이션 각각 주면 매개변수 넘어간다! 모델 없이도 ㅎㅎ
		logger.info("register03");
		logger.info("userId : " + userId);
		logger.info("password : " + password);
		return "result";
	}
	
	// 4) 자바빈즈 규칙에 맞는 객체는 매개변수로 선언하면 기본적으로 전달된다
	@RequestMapping(value = "/modelattribute/register04", method = RequestMethod.POST)
	public String register04(Member member) { 
		// @ModelAttribute 어노테이션을 사용하지 않아도! 모델로 넘겨주지 않아도! 객체로 받는 즉시 넘겨줌 원하는 값 출력가능
		logger.info("register04");
		logger.info("member.getUserId() : " + member.getUserId());
		logger.info("member.getPassword() : " +  member.getPassword());
		return "result";
	}
	
	// 5) 자바빈즈 규칙에 맞는 객체는 매개변수로 선언하면 기본적으로 전달된다 (2)
	@RequestMapping(value = "/modelattribute/register05", method = RequestMethod.POST)
	public String register05(Member member) { 
		logger.info("register05");
		logger.info("member.getUserId() : " + member.getUserId());
		logger.info("member.getPassword() : " +  member.getPassword());
		logger.info("member.getAddress().getPostCode() : " +  member.getAddress().getPostCode());
		logger.info("member.getAddress().getLocation() : " +  member.getAddress().getLocation());
		return "result";
	}
	
}

registerModelAttributeForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register Model Attribute 20221129</title>
</head>
<body>
	<h3>3. @ModelAttribute 어노테이션</h3>
	
	<p>
		요청 View : registerModelAttributeForm.jsp<br/>
		컨트롤러 : ModelAttributeMemberController
	</p>
	
	<p>1) 기본자료형은 매개변수로 선언하더라도 기본적으로 전달되지 않는다.</p>
	<form action="/modelattribute/register01" method="post">
		userId : <input type="text" name="userId" value="hongkd"/><br/>
		password : <input type="text" name="password" value="1234"/><br/>
		<input type="submit" value="register01"/><br/>
	</form><br/>
	
	<p>2) 기본 자료형인 매개변수에  @ModelAttribute 어노테이션을 지정하여 데이터를 전달한다.</p>
	<form action="/modelattribute/register02" method="post">
		userId : <input type="text" name="userId" value="hongkd"/><br/>
		password : <input type="text" name="password" value="1234"/><br/>
		<input type="submit" value="register02"/><br/>
	</form><br/>
	
	<p>3) 기본 자료형인 매개변수가 여러 개인 경우 각각의 매개변수에 @ModelAttribute 어노테이션을 지정하여 데이터를 전달한다.</p>
	<form action="/modelattribute/register03" method="post">
		userId : <input type="text" name="userId" value="hongkd"/><br/>
		password : <input type="text" name="password" value="1234"/><br/>
		<input type="submit" value="register03"/><br/>
	</form><br/>
	
	<p> 4) 자바빈즈 규칙에 맞는 객체는 매개변수로 선언하면 기본적으로 전달된다.</p>
	<form action="/modelattribute/register04" method="post">
		userId : <input type="text" name="userId" value="hongkd"/><br/>
		password : <input type="text" name="password" value="1234"/><br/>
		<input type="submit" value="register04"/><br/>
	</form><br/>
	
	<p> 5) 자바빈즈 규칙에 맞는 객체는 매개변수로 선언하면 기본적으로 전달된다. (2)</p>
	<form action="/modelattribute/register05" method="post">
		userId : <input type="text" name="userId" value="hongkd"/><br/>
		password : <input type="text" name="password" value="1234"/><br/>
		postCode : <input type="text" name="address.postCode" value="12345"/><br/>
		location : <input type="text" name="address.location" value="대전시"/><br/>
		<input type="submit" value="register05"/><br/>
	</form><br/>
	
</body>
</html>

result.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>Result 20221129</title>
</head>
<body>
	<h3>Result</h3>
	userId : ${userId }<br/>
	password : ${password } <br/>
	
	member.userId : ${member.userId }<br/>
	member.password : ${member.password } <br/>
	
	<c:if test="${not empty member.address.postCode }">
		member.address.postCode : ${member.address.postCode }<br/>
	</c:if>
	<c:if test="${not empty member.address.location }">
		member.address.location : ${member.address.location }<br/>
	</c:if>
	
	<!-- RedirectAttributes시에 사용 -->
	msg : ${msg }
	
</body>
</html>

RedirectAttributeMemberController.java

package org.hdcd.controller;

import org.hdcd.vo.Member;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class RedirectAttributeMemberController {
	
	private static final Logger logger = LoggerFactory.getLogger(RedirectAttributeMemberController.class);
	
	/*
	 * 4. @RedirectAttributes 어노테이션
	 * - @RedirectAttributes 어노테이션은 일회성으로 데이터를 전달하는 용도로 사용된다.
	 */
	
	@RequestMapping(value = "/redirectAttributes/registerForm", method = RequestMethod.GET)
	public String registerForm() {
		logger.info("redirectattribute registerForm");
		return "member/registerRedirectAttributeForm";
	}
	// 1) RedirectAttributes는 일회성으로 데이터를 전달하는 용도로 사용 된다.
	@RequestMapping(value = "/redirectattribute/register", method = RequestMethod.POST)
	public String register(Member member, RedirectAttributes redirectAttributes) {
		logger.info("register");
		redirectAttributes.addFlashAttribute("msg", "success");
		return "redirect:/redirectattribute/result";
	}
	
	// (1)번 처리후 넘어갈 결과 페이지
	@RequestMapping(value = "/redirectattribute/result", method = RequestMethod.GET)
	public String result() {
		logger.info("result");
		return "result";
	}

	
}

registerRedirectAttributeForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register Redirect Attribute Form</title>
</head>
<body>
	<h3>Register Form</h3>
	<form action="/redirectattribute/register" method="post">
		userId : <input type="text" name="userId" value="hongkd"/><br/>
		password : <input type="text" name="password" value="1234"/><br/>
		<input type="submit" value="register"/><br/>
	</form>
</body>
</html>
profile
안녕하세요! 초보개발자 공부 시작!

0개의 댓글