개발자 미니민의 개발스터디

[spring] RedirectAttributes & ModelAttribute

by mini_min
[spring] RedirectAttributes & ModelAttribute

✔️ RedirectAttributes

: 리다이렉트된 페이지에 값을 넘길 때 사용한다.

: 리다이렉트된 후 즉시 사라지는 것이 특징이다.

: 쿼리스트링(GET방식 파라미터)을 사용하지 않고 임시 메모리를 사용하여 보이지 않게 리다이렉트된 페이지에 값을 보낼 수 있다.

 

👩‍💻 ex06 예제

- RedirectAttributes 를 붙여서 리다이렉트 되는 ex06의 페이지에 값을 넘긴다.

- addFlashAttribute 와 함께 사용한다. 

@PostMapping("request")
public String submit(User dto, final RedirectAttributes rAttr) {

    String s = dto.getAge() >=19 ? "성인" : "미성년자";

    rAttr.addFlashAttribute("dto", dto);
    rAttr.addFlashAttribute("msg", s);

    //포워딩 XX 리다이렉트 해준다. 두번요청되기 때문에 리다이렉트 해줘야함
    return "redirect:/ex06/complete";
}

 

 

✔️ @ModelAttribute 

: 리다이렉트한 페이지에서 RedirectAttributes에 보낸 정보를 넘겨 받을 수 있다.

: @ModelAttribute ("dto") 는 가로 안에 dto 를 뒤에 오는 인자에 넣으라는 뜻이다.

 

- RedirectAttributes 로 dto 와 msg 를 넘겼기 때문에 두 개의 정보를 넘겨받을 수 있게 된 것이다. 

- @ModelAttribute("dto") 가 없으면 아래는 모두 null 이다.

@GetMapping("complete")
	public String complete(@ModelAttribute("dto") User dto) {
		
		//@ModelAttribute("dto") 가 없으면 아래는 모두 null 이다.
		System.out.println(dto.getName() + " : " + dto.getId());
		
		return "ex06/result";
	}

 

 

✔️ @ModelAttribute  (2)

1) 개요

: Controller 메소드의 매개변수나 리턴값을 Model 객체와 바인딩하기 위해 사용

: @ModelAttribute 는 실제적으로 ModelMap.addAttribute("이름", "값")와 같은 기능

 

2) 요청 메소드의 매개변수에 사용

: 요청 파라미터는 @ModelAttribute 가 적용된 메소드의 파라미터(모델 객체)에 맵핑 되어 넘어온다.

: @ModelAttribute 적용된 메소드의 매개변수는 포워딩 되는 View 페이지에서 사용 가능

 

3) 메소드 레벨(메소드 위)로 사용한다.

: View 에 사용할 데이터를 설정할 용도로 사용한다. 

: @ModelAttribute 가 설정된 메소드는 @RequestMapping 이 적용된 메소드보다 먼저 호출

: @ModelAttribute 메소드 실행 결과로 리턴되는 객체는 자동으로 Model에 저장

: @ModelAttribute 메소드 실행 결과로 리턴된 객체를 View 페이지에서 사용 가능

 

👩‍💻 ex11 예제

- 둘이 동일하다.

@PostMapping("write")
public String submit(User dto, Model model) {

    model.addAttribute("dto", dto);
    return "ex11/result";
}
@PostMapping("write")
public String submit(@ModelAttribute("dto") User dto) {

    return "ex11/result";
}

 

- 메소드의 매개변수에 HttpServletRequest 등의 사용도 가능하다. 

//메소드의 매개변수에 HttpServletRequest 등의 사용도 가능하다. 
@ModelAttribute("memberTypes")
public List<String> getMemberTypes() throws Exception {
    List<String> list = new ArrayList<String>();

    list.add("일반회원");
    list.add("기업회원");
    list.add("특별회원");

    return list;
}

 

 

 

 

'Spring' 카테고리의 다른 글

[spring] @RequestBody & @RequestBody (JSON)  (0) 2022.11.14
[spring] @SessionAttributes 세션  (0) 2022.11.14
[spring] List 배열로 요청 파라미터 받기  (0) 2022.11.14
[spring] RequestParam  (0) 2022.11.14
[spring] REST 개념  (0) 2022.11.14

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기