Java/Spring

Redirect시 parameter 값 담아서 넘기는 방법

코딩공부 2021. 3. 12. 11:35

 

public String getUserInfo(@RequestParam HashMap<String, Object> param, Model model, RedirectAttributes redirect) throws Exception {

	HashMap<String,Object> userInfo = loginService.getUserInfo(param);

    if(param.get("userSeq").equals(null)){
    	param.put("userSeq",userInfo.get("USER_SEQ"));
    }else{
    	param.put("userSeq",param.get("userSeq"));
    }
    
    /*최근접속일 update*/
    loginService.addLastAccess(param);
    session.setAttribute("userSeq", userInfo.get("USER_SEQ"));
    session.setAttribute("user", userInfo.get("USER_ID"));
    session.setAttribute("userRole", userInfo.get("USER_ROLE"));
    session.setAttribute("userType", userInfo.get("USER_TYPE"));

	redirect.addAllAttributes(param); // HashMap 형태로 모든 parameter 담음
	//redirect.addAttribute() // 각 객별 Object, String param을 담을 경우 
    //redirect.addFlashAttribute("KeyName", "KeyValue"); // 1회성 parameter 새로 고침시에 사라짐
    
    
    return "redirect:"+param.get("referer"); // 이전 페이지 url 정보
}

 

 

 

리다이렉트 전송시 

 

GET방식 

RedirectAttributes addAttribute를 사용하면 redirect get 구현이 가능합니다.

 

@RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(RedirectAttributes redirect) {
        
        redirect.addAttribute("pageNum", 1);        
 
        return "redirect:/board/getBoardMain";
    }

받는쪽은 RequestParam으로 매핑하면 됨

    @RequestMapping(value="/getBoardMain", method=RequestMethod.GET)
    public String getBoardMain(@RequestParam("pageNum") int pageNum, Model model) {
        
        model.addAttribute("boards",service.getBoards());
        model.addAttribute("boardCount", service.getBoardCount());
        
        return "home";
        
    }

 

 

 

POST방식

 

Spring3 에서 제공하는 RedirectAttributes addFlashAttribute 를 사용하면 redirect post 구현이 가능합니다.

 

하지만 일회성입니다. 

새로고침하면 날라가는 데이터이므로 사용목적에 따라서 사용/불가능 판단을 잘 하셔야 할거 같습니다.

 

@RequestMapping("/redirectnewpage")
public String redirectnewpage(RedirectAttributes redirectAttributes){
    Map<String, Object> map = new HashMap<String,Object>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    redirectAttributes.addFlashAttribute("vo", map);
    return "redirect:/herepage";
}


출처: https://hellogk.tistory.com/86 [IT Code Storage]

출처: https://hellogk.tistory.com/86 [IT Code Storage]

 

<h2>Redirect 페이지</h2>
key1 :: ${vo.key1 }<br/>
key2 :: ${vo.key2 }


출처: https://hellogk.tistory.com/86 [IT Code Storage]

 

일회성 Parameter 사용하지 않는 POST 방식

중간에 데이터 처리 할 수 있는 임시페이지 생성해서 parameter를 hidden 으로 값을 세팅한 다음 post 로 바로 submit 

 

@RequestMapping(value = "/getUserInfo")
	
	public String getUserInfo(@RequestParam HashMap<String, Object> param, Model model) throws Exception {

		HashMap<String,Object> userInfo = loginService.getUserInfo(param);

		if(param.get("userSeq").equals(null)){
			param.put("userSeq",userInfo.get("USER_SEQ"));
		}else{
			param.put("userSeq",param.get("userSeq"));
		}
		/*최근접속일 update*/
		loginService.addLastAccess(param);
		session.setAttribute("userSeq", userInfo.get("USER_SEQ"));
		session.setAttribute("user", userInfo.get("USER_ID"));
		session.setAttribute("userRole", userInfo.get("USER_ROLE"));
		session.setAttribute("userType", userInfo.get("USER_TYPE"));

		model.addAllAttributes(param);

		return "/login/loginProc";
	}

 

loginProc.jsp 

<script type="text/javascript">
    $(document).ready(function(){
        $("#frm").submit();
    });
</script>

<form id="frm" name="frm" action="${param.referer}" method="POST">
    <input type="hidden" id="cmtSeq" name="cmtSeq" value="${param.cmtSeq}">
    <input type="hidden" id="userSeq" name="userSeq" value="${param.userSeq}">
</form>