본문 바로가기

Backend/Spring | SpringBoot

[Spring] RedirectAttributes

반응형

RedirectAttributes

 

Rediect시 일반적인 방법으로는 request가 전달되지 않는다. 따라서 새로고침으로 정보를 유지하려면 중간에 전달하는 방식을 사용해야 하는데 여러가지 방식중에 RedirectAttributes를 사용 할 수 있다.

 

RedirectAttributes에는 두가지 매서드가 있다.  Redirect는 Post / Redirect / Get 방식이기 때문에 결국에 Get으로 데이터가 넘어가되지만 다음과 같은 매서드 특징이 있다.

addAttribute URL뒤에 전달되는 파라미터가 노출됨 전달 후에도 접근 가능
addFlashAttribute URL에 전달되는 파라미터 정보를 숨김 전달 후 소멸됨

 

 

그래서 컨트롤러로 구현하는 중에 흐름이 생각했던대로 데이터가 넘어가지 않아서 찾아보다보니 아래 사진과 같은 차이가 생겼다.

빨간색 흐름이라고 생각했으나 파란 흐름으로 흘러감

 

function fn_dataSetMng(korName, engName, dataNo) {
    loading.start();
    $("#data1").val(korName);
    $("#data2").val(engName);
    $("#data4").val(dataNo);
    $("#nowPage").val(0);
    // const serializedValues = $('#frm0').serializeObject();
    // console.log(serializedValues);
    $("#frm0").attr("action", "/amng/dataVariableMng/action/dataVariableMng.do").submit();
    //fnMcenAjaxJson("POST", "/amng/dataVariableMng/action/dataVariableMng.do", JSON.stringify(serializedValues), resultAjaxSaveCallback, "");
}
// AJAX POST로 넘어가면 접근이 잘못되었다고 나옴(접근제어 Configuration이 들어가서 그런듯)

 

// 변수 관리 redirect action 관리
@RequestMapping(value = "/amng/dataVariableMng/action/{action}")
    public String dataVariableMngRedirector(@PathVariable String action, @ModelAttribute AdminSearchVO pagingVO, HttpServletRequest request, RedirectAttributes rttr) throws NullPointerException, IOException, SqlSessionException, CException {
        log.info("/amng/dataVariableMng/action/" + action + " start!");
        if(action.equals("dataVariableMng.do")){
            rttr.addFlashAttribute("dataVariableListVO", pagingVO);
        }else{
            rttr.addFlashAttribute("dataVariableVO", pagingVO);
        }
        return "redirect:/amng/dataVariableMng/" + action;
    }
    
// target 페이지
@RequestMapping(value = "/amng/dataVariableMng/dataVariableMng.do")
    public String displayVariableList(@ModelAttribute("dataVariableListVO") AdminSearchVO paramPageVO,
                                      HttpServletRequest request, Model model, HttpSession session) throws IOException, SQLException {
        AdminSearchVO pageVO = paramPageVO;
        
        // redirect 해서 session값이 있으면 유지 아니면 새로 대입
        Map<String, ?> flashMap = RequestContextUtils.getInputFlashMap(request);
        if (flashMap != null) {
            pageVO = (AdminSearchVO) flashMap.get("dataVariableListVO");
            session.setAttribute("dataVariableListVO", pageVO);
        } else {
            if (session.getAttribute("dataVariableListVO") != null) {
                pageVO = (AdminSearchVO) session.getAttribute("dataVariableListVO");
            }
        }

        pageVO.setStatusType("Y");
        List<CustDataVariableVO> group = adminDataVariableService.selectDataVariableGroupList(pageVO);
        model.addAttribute("group", group);

        int listTotalCnt = adminDataVariableService.selectDataVariableGroupTotalCnt(pageVO);

        pageVO.configurePageVO(pageVO.getNowPage(), Constants.VIEW_ROW, Constants.VIEW_PAGE, listTotalCnt);

        List portalUrlList = adminDataVariableService.selectDataVariableGroupList(pageVO);

        model.addAttribute("list", portalUrlList);
        model.addAttribute("dataVariableListVO", pageVO);

        return "/amng/dataVariableMng/dataVariableMng";
    }

 

...
<form id="frm0" name="frm0" method="post">
	<input type="hidden" id="data1" name="tableKorName">
	<input type="hidden" id="data2" name="tableEngName">
	<input type="hidden" id="data3" name="custDataVariableVersion">
	<input type="hidden" id="data4" name="custDataVariableNo" value="${custDataVariableVO.custDataVariableNo}">
	<input type="hidden" id="nowPage" name="nowPage" value="${custDataVariableVO.nowPage}">
	<input type="hidden" name="findSeq" id="findSeq" value="0"/>
	<sec:csrfInput/>
</form>
...

 

 

 

반응형

'Backend > Spring | SpringBoot' 카테고리의 다른 글

Tomcat 에러  (0) 2024.02.19
[Spring] 예외처리(Exception Handler)(2)  (0) 2023.11.30
[Spring] 예외처리(Exception Handler)(1)  (0) 2023.11.28
[Spring Security] CSRF갱신  (0) 2023.11.03
[Spring] SQLErrorCodesFactory  (0) 2023.10.06