반응형
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 |