Spring MVC - RedirectAttributes (Spring 3.1 이상)

2018. 9. 23. 15:07모두모두 개발자다요/JAVA

게시판 스타일의 CRUD 프로그램을 개발할 때, 보통 리스트 조회(검색) - 상세(단건) 조회 - 등록/수정/삭제의 프로세스를 거치게 개발하기 마련이다.

 신경 제대로 안 쓰고 막 개발하다보면 흔히 "등록/수정/삭제" 처리 후 리스트 조회 화면으로 돌아갈 부분에 

이전 리스트 화면에서의 (검색) 조건 값에 신경을 안 쓰고 그냥 리스트 1페이지로 꼽아버리는 경우를 많이 봤다.

(나도 그랬었지만.. 최근 주니어 개발자의 코드를 까보고는... 이건 뭐... 

그래 (100보 양보해서) 기획자 탓으로 돌리고 그냥 앓느니 죽지~ 하고 고쳤다;;)


리스트 조회 리퀘스트 메소드 개발이 주로 get 방식임을 감안했을 떄 사실 조회 조건이 까다로울 수록 일일히 리다이렉트 URI 를 찢어 붙여 만들어주는 것도 인내심에 한계가 있다.

("?param1="+ vo.getParam1() + "&param2=" + vo.getParam2() ....)

만약 post 방식이라면 위 방식으로는 답이 될 수 없는 노릇이고..


RedirectAttributes 를 써서 리다이렉트에 속성 값을 전달할 수 있다.

RedirectAttributes.addFlashAttribute("조회조건", 조회조건VO);


@RequestMapping(value="/list.do")

public String list(@ModelAttribute(value="searchVO") SearchVO vo) {
    // 목록 조회(검색) 서비스
    list = someService.getList(vo);
    model.addAttribute("list", list);
    return "list";
}



@RequestMapping(value="/save.do")

public String save(@ModelAttribute(value="searchVO") SearchVO vo, RedirectAttributes  redirectAttributes ) {
    // 저장 서비스
    someService.save(vo);
    redirectAttributes.addFlashAttribute("searchVO", vo);
    return "redirect:/list.do";
}


메소드명에 "Flash" 가 붙는 것을 보니, 뭔가 휘발성을 띄는 메소드임에 틀림없다.

(알아본 바.. 실제 구현된 내용을 보니 일시적으로 세션에 담았다 소멸하는 방식으로 만들어졌다고...;;)


자, 이를 잘 교묘하게 응용함으로써, 앞으로는 테스트 제대로 안해보고 "게시판 다짰어요~" 라고 땡보짓하는 덜렁이 주니어 개발자들에게 빼박 맨붕의 챈스를 가져다 줄 수 있게 되었다.!!