개인적인 정리

RedirectAttributes(redirect 객체 전달) 본문

전자정부표준프레임워크

RedirectAttributes(redirect 객체 전달)

yeon.Biju 2020. 9. 3. 11:31

redirect 시 데이타를 전달할 수 있는 방법

RedirectAttributes 클래스를 사용하여 전달할 수 있다. 
- RedirectAttributes 클래스는 Spring 3.1 버전에 추가되었다고 한다.

- redirect시 RedirectAttributes 클래스를 이용해 효과적으로 alert창을 띄울수도 있다. 

 

https://m.blog.naver.com/allkanet72/220964699929

 

[스프링] RedirectAttributes

RedirectAttributes 폼 형식의 문서를 작성 후, 서버로 보내면(POST 방식) 곧이어 다른 페이지로 리...

blog.naver.com

 

https://galid1.tistory.com/563

 

SpringMVC - 핸들러 메소드 - 6 (리다이렉트시 데이터 다루기 : RedirectAttributes, FlashAttributes)

SpringMVC - 핸들러 메소드 - 6 (RedirectAttributes, FlashAttributes) 핸들러 메소드의 매개변수중 하나인 RedirectAttributes, FlashAttributes에 대해 알아보도록 하겠습니다. 1. RedirectAttributes 1.1 Redi..

galid1.tistory.com

 

 

RedirectAttributes 클래스를 통해 string 형태와 map, list, vo 등의 object 형태로 넘겨줄 수 있다.

 

1. addAttribute 사용

아래와 같이 addAttribute 에 String 문자열을 넣어 전달할 수 있다.

1
2
3
4
5
6
7
8
@RequestMapping(value="/aaa/bbb/ddd.do", method =RequestMethod.POST)
public String insertAaaaaaaaaa(ModelMap model, RedirectAttributes rttr) throws Exception{
    
    String message ="등록되었습니다.";
    rttr.addAttribute("message", message);
    
    return "redirect:/aaa/bbb/ccc.do";
}
cs

String 문자열을 넣어 전달하면, 아래와 같은 형태가 된다.(String 문자열을 통해 여러개의 변수와 데이타도 전달이 가능하다.)

1
/aaa/bbb/ccc.do?message=등록되었습니다.
cs

와 같이 데이타가 URI에 노출된다. 

이런 식으로 노출하는 건 딱히 좋아하지 않아 다른 방법을 고민해봤다.

2. addFlashAttribute 사용(String 을 전달)

addFlashAttribute 라는 메소드를 통해 데이타를 전달할수 있는데, 보통 아래 3번과 같이 여러개의 데이타를 map, list등을 통해 전달하는데 사용되는 것 같다. 다만 여기서는 string 문자열을 전달해봤는데 유용하게 사용할 수 있을 것 같다.

addFlashAttribute 의 경우 데이타가 post 형식으로 전달이 된다.

addFlashAttribute 의 경우 데이타가 한번만 사용된다.(Flash가.. 휘발성이란 얘긴가...) 

1
2
3
4
5
6
7
8
@RequestMapping(value="/aaa/bbb/ddd.do", method =RequestMethod.POST)
public String insertAaaaaaaaaa(ModelMap model, RedirectAttributes rttr) throws Exception{
    
    String message ="등록되었습니다.";
    rttr.addFlashAttribute("message", message);
    
    return "redirect:/aaa/bbb/ccc.do";
}
cs

String 문자열을 전달했을 경우에  redirect되는 method의 jsp 파일에서

1
${message}
cs

처럼 출력을 해보면 한번만 "등록되었습니다." 가 출력된다.

즉 새로고침을 해도 한번만 나오는데 게시판 같은 경우 글 등록/수정/삭제후에 목록화면으로 이동하는 경우에 유용할 것 같다. 

 

3. addFlashAttribute 사용(String 이 아닌 Object)

addFlashAttribute를 통해 object 를 전달할 수가 있다. 

여러개의 데이타(변수)들을 하나의 object(map, list, vo)등에 넣어서 전달을 한다.

redirect 될 때 데이타가 여러개인 경우에 유용하다고 할 수 있겠다.

예제에서는 vo를 예로 들었지만 map, list등이 사용가능하다는 것을 다시 한번 그냥... 강조해본다.

1
2
3
4
5
6
7
8
@RequestMapping(value="/aaa/bbb/ddd.do", method =RequestMethod.POST)
public String insertAaaaaaaaaa(ModelMap model, RedirectAttributes rttr) throws Exception{
    
    String message ="등록되었습니다.";
    rttr.addFlashAttribute("aaaaVO", aaaaVO)
    
    return "redirect:/aaa/bbb/ccc.do";
}
cs

 

그럼 데이타를 어떻게 받을까가... 고민이 되었는데

 

redirect 되는 되는 메소드에서 받을 때는 아래와 같이 사용한다고 한다.

데이타를 받을 때 RequestContextUtils.getInputFlashMap(request) 를 이용해서 받는다고 한다.

1
2
3
4
5
6
7
8
9
10
11
public String aaaa(HttpServletRequest request) throws Exception{
        
        Map<String, ?> flashMap =RequestContextUtils.getInputFlashMap(request);
        
        if(flashMap!=null) {
            
            aaaaVO =(AaaaVO)flashMap.get("aaaaVO");
        }
            
        return ".......";
    }
cs

 

redirect에 대한.. 고민으로 시작해서 여기까지 작성을 해봤다.

 

Done

Comments