'2012/08'에 해당되는 글 1건

  1. 2012.08.17 FlashMap 사용하기. - springframework 3.1
제2 외국어 영역2012.08.17 14:57

문제의 시작은 그거였다.. (스프링 프레임웍 기반.)


컨트럴에서 로직을 처리하고 redirect를 한다.

그런데 redirect 한 곳에서 무언가의 데이터를 받고 싶다.. 


그럴땐 어떻게 하나?


쉽게는 그냥 url에다가 querystring 만들어서 넘겨주면 된다.

근데.... querystring에 넘거어가는 값을 숨기고  싶다.. 샹.. 어케해야하나?


대충 생각해보면 세션 스콥에 올린다음에 다음 엑션에서 꺼내쓰면 된다. 

근데.. 꺼내고 지우고 이작업을 있던 없던.. 무조건 해줘야 한다.. 


근데 졸라 불편하다.. -.-; 코드도 지저분해주고 .. 


뭐 그래서 낮에 그냥 세션스토어라는 녀석을 만들어서 이쪽에 넣고 담고 .. flush 특성처럼 만들었다.. 

근데 먼가 좀 예매모호하다.

일반 Bean에서 session을 가져 오기 위해서 해야 하는 코드가.. 


ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession session = attr.getRequest().getSession(true);


이렇게 꺼내면 된다.. 

근데 좀 엉뚱한 곳에서 호출 하면 (정확히 sitemesh 의 decorator에서..) 


Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.


매우 친절하게 이러한 에러를 쳐 밷어 주신다..  췟;; 안써.. 


이래서 스프링 전문가님 백기선님이랑 수다를 떨었다.. 그러다가 백기선님이 몇개 링크를 던졌다.. 3.1MVC핵심 기능이라면서.. 



근데 저 문서를 봐도 어떻게 해야 하는지 잘 모르겠더라.. 

그래서 RedirectAttributes.java 파일을 깠다.. (소스는 대충이렇다..) 거기 봣더니 설명이 잘되어 있다..ㅋㅋ
그래서 했다.. ㅋㅋ
잘된다..ㅋㅋㅋ




	@RequestMapping("/info/test")
	public String tests(RedirectAttributes redirectAttributes) {
		redirectAttributes.addFlashAttribute("isNewUser", true);
		return "redirect:/";
	}

이러면 받는 컨트럴러의 model 객체에 알아서 담아준다.. ㅋ 스프링 만세 ㅋㅋ 

Posted by is윤군