우리는 페이지 구현하면서 종종 redirect를 해줄 경우가 있다.
하지만, 대부분 parameter들을 url뒤에 붙여서 get방식으로 값을 넘겨준다.
이번에 다룰 내용에서는 redirect post를 다룰 예정이다.
바로 RedirectAttributes의 addFlashAttribute 를 이용하여 post방식처럼 url뒤에 parameter를
추가하지 않아도 화면에 값을 받을수 있다.
그.러.나 jsp 페이지의 requestmapping 컨트롤러에서도 값을 받을수 있나 확인해봤는데 -_- view 페이지에서만 출력이 되더라...
이건 조금더 확인해봐야할듯..
그렇다면 임의로 컨트롤러 2개를 만들어서 테스트를 해보도록 합시다요
1. 우선은 redirect페이지를 호출해줄 컨트롤러가 필요하겠죠
@RequestMapping(value="/redirectPostTest") public String redirectPostTest(RedirectAttributes redirectAttr) { redirectAttr.addFlashAttribute("param1", "나의파람"); return "redirect:/listTest"; }
2. 마지막으로 redirect페이지인 컨트롤러 와 뷰를 생성해주어야 하겠고요
위 redirect 컨트롤러에서 redirect 해주는 mapping url이 listTest이니까 컨트롤러에
하나 추가를 해주고
@RequestMapping(value="/listTest") public String listTest() { return "listTest"; }
return view page인 listTest.jsp 페이지에 다음과 같이 태그추가를 해보도록 하시고
실행을 해보도록 하시죠.
redirect 데이터 :: ${param1 }
http://localhost:8080/redirectPostTest 라고 준결과 페이지다.
redirect url로 정상적으로 가면서도 url 뒤에는 어떠한 parameter도 붙지 않고 redirectPostTest
URL에서 SET해준 값을 정상적으로 받을수 있었다.
여기서 주의할 사항은 addFlashAttribute에 대한 set은 한개만 되는거 같다.
addFlashAttribute 를 2개의 데이터를 set하였을때 넘겼을 경우 두가지 데이터 모두 null이 떨어지는것이
확인 되었다.
그렇다면 여러개의 데이터를 받고싶을 경우는 어떻게 해야 할까?
정답은 아니더라도 본인이 생각한 임시방편은 -_- map객체에 여러개의 값을 담아서 전송했다.
대부분 넘기고자 하는 parameter들의 타입들이 int,string과같은 단일 변수이라 가정하고 구현한것임.
addFlashAttribute를 두번 이용하여 데이터를 전달하였을때의 결과
//redirectPostTest 컨트롤러에 다음과 같이 코드 추가 @RequestMapping(value="/redirectPostTest") public String redirectPostTest(RedirectAttributes redirectAttr) { redirectAttr.addFlashAttribute("param1", "나의파람"); redirectAttr.addFlashAttribute("param2", "나의파람2"); return "redirect:/listTest"; }
jsp페이지(body태그에 넣음)
redirect 데이터(1) -> ${param1 } redirect 데이터(2)-> ${param2 }
실행결과화면
하나라도 나올줄 알았는데 값이 모두 안찍힘;;
addFlashAttribute를 한번 이용하되 arraylist에 데이터를 담아 전달하였을때의 결과
@RequestMapping(value="/redirectPostTest") public String redirectPostTest(RedirectAttributes redirectAttr) { Map<String, Object> map = new HashMap<String,Object>(); map.put("param1", "나의파람1"); map.put("param2", "나의파람2"); redirectAttr.addFlashAttribute("param1", map); return "redirect:/listTest"; } @RequestMapping(value="/listTest") public String listTest() { return "listTest"; }
jsp페이지(body태그에 넣음)
redirect 데이터(1) -> ${param1.param1 }
redirect 데이터(2)-> ${param1.param2 }
실행결과화면
잘나온다..
이번포스팅에서는 redirect post방식을 알아보았다.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
class파일내에서 classpath에 존재하는 리소스 파일읽어오기 (0) | 2014.07.30 |
---|---|
스프링3(Spring3) - 메이븐(maven) pom.xml에서 오라클 JDBC(ojdbc14.jar) 라이브러리 추가하기 (0) | 2014.07.30 |
스프링3(Spring3) - @ResponseBody + jackson을 이용하여 심플하게 JSON 구현하기 (0) | 2014.07.30 |
스프링3(Spring3) - 인터셉터(interceptor) 설정 (4) | 2014.07.28 |
스프링3(Spring3) - SQL 쿼리 출력을 위한 로그레벨 설정 (0) | 2014.07.27 |