Develop

[Thymeleaf 타임리프] ModelAndView 리턴페이지에서 특정 id 영역만 변경하고 싶을 때

issuemaker99 2024. 9. 5. 17:21
728x90

spring framework 의 java controller 에서 리턴페이지를 지정해 줄 때 특정 id 영역만 변경하게 할 수 있습니다.

예를 들면 리스트페이지에서 검색 버튼을 클릭 하면 리스트영역만 변경되고 다른 검색조건의 영역은 리플레쉬 하고 싶지 않을 때

활용할 수 있습니다.

 

  • @GetMapping({"/edu200/edu200100", "/edu200/edu200100/srch"}) 으로 2개의 url 이 같은 메소드로 매핑되게 합니다. 첫번째는 페이지 최초 로드시 호출할 url 이고 두번째 url 은 호출된 페이지에서 검색버튼을 클릭했을 때 호출할 url 입니다.
  • String requestUrl = (String)request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 로 접근한 url 이 어떤 url 인치 체크를 합니다. 
  • mav = new ModelAndView("EDU/EDU200/EDU200100 :: #container_tbl_trnSrchList"); 로 'container_tbl_trnSrchList' id 값을 갖는 영역만 새로 호출한 정보로 변경 됩니다.
@GetMapping({"/edu200/edu200100", "/edu200/edu200100/srch"})
public ModelAndView getRglrTrnInfrList(HttpServletRequest request, RglrTrnMgntSrchDto srchDto, Locale locale){
    String requestUrl = (String)request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    ModelAndView mav = new ModelAndView("EDU/EDU200/EDU200100");

    if(requestUrl.indexOf("/edu200100/srch") > -1 ) {
        mav = new ModelAndView("EDU/EDU200/EDU200100 :: #container_tbl_trnSrchList");
    }

    ...
    ...
    로직구현 
    ...
    ...

    return mav;
}

 

▶ 3개의 div 중 id 값이 container_tbl_trnSrchList 인 div 만 변경이 되고 나머지 영역은 변경되지 않고 그대로 유지됩니다.

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <div id="container_tbl_trnSrchList">
        </div>
        <div id="container_tbl_trnSrchList2">
        </div>
        <div id="container_tbl_trnSrchList3">
        </div>
    </body>
    
<section layout:fragment="script">
	<script th:inline="javascript">	  
	  $(document).ready(function () {

	const form = $("#trnSrchFrm")[0];   
        const formData = new FormData(form);
   
        cmAjax({
            url: "/edu/edu200/edu200100/srch"
            , type: "get"
            , data: new URLSearchParams(formData).toString()
            , dataType: "html"
            , async: false
            , success: function (fragment) {
                $('#container_tbl_trnSrchList').replaceWith(fragment);
            }
            , error: function (e) {
                alert(e);
                return false;
            }
        });	
	</script>
</section>
</html>
LIST