Categories: 개발

[Thymeleaf] 비동기(ajax)로 View 갱신하기

비동기로 변경?

타임리프를 사용한다면 서버에서 받아온 데이터로 화면을 그리는 경우가 많을 것이다.
그러다보면 화면 깜박임없이 새로운 데이터로 view를 갱신해야할때가 생긴다.
그럴때 비동기 ajax를 활용해 View 를 갱신한다.

준비

Controller 에 list 라는 key 값에 a,b,c,d 값을 던져주도록 하였다.

@GetMapping("/test")
public String test(Model model){
    model.addAttribute("list",Arrays.asList("a","b","c","d"));
    return "/test";
}

이후 view 에서는 list 값을 그려주도록 하였다.

<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="utf-8">
        <title>main</title>
        <script src="https://code.jquery.com/jquery-3.7.1.js"></script>
    </head>
    <body>
        <ul>
            <li th:each="val : ${list}">
                [[${val}]]
            </li>
        </ul>
    </body>
</html>

결과

서버에서 response 된 list 값인 a,b,c,d 가 제대로 그려지는걸 확인 할 수가 있다.

Ajax 만들기

비동기 처리하기에 앞서 변경할 영역의 id 를 지정해준다.
나는 ul 에 test 란 아이디를 주었고 ajax 요청에 사용할 버튼을 추가하였다.

<ul id="test">
    <li th:each="val : ${list}">
        [[${val}]]
    </li>
</ul>
<button >



버튼에 실행될 함수를 만들었다.
response 받은 후에는 test dom을 서버에서 받은 fragment 값으로 변경하도록 하였다.

<script>
    const requestAjax = ()=>{
        $.ajax({
            type: "get",
            url: "/test-ajax",
            data: {},
            success: (fragment)=>{
                $('#test').replaceWith(fragment)
            },
            error: (error)=>{
            }
        })
    }
</script>

test-ajax request 를 받을 controller 를 추가하였다.
request 가 오면 e,f,g,h 를 던져주도록 하여서 view 가 변경될 수 있게 하였다.
return 값은 변경할 view 경로 :: 아이디 를 return 해준다.

@GetMapping("/test-ajax")
public String testAjax(Model model){
    model.addAttribute("list",Arrays.asList("e","f","g","h"));
    return "/test :: #test";
}

결과

요청 버튼을 누르니 e,f,g,h로 값이 변경되는걸 확인할 수 있다.

mana

Recent Posts

[여행] 1박 2일 경주 뚜벅이 여행기

경주시티투어 이번 여행에 앞서 뚜벅이 여행객들에게 추천하는게 바로 경주시티투어 이다. 경주시티투어 사이트로이동 경주시티투어는 여러가지가 있다.1.…

8개월 ago

[공공데이터] 공공 API 사용하기 – 지하철 실시간 도착 정보

열린데이터 광장 공공데이터 사이트로 이동 서울 열린데이터 광장에서는 서울에 관한 여러가지 공공 API 를 제공한다.그…

8개월 ago

[Vue] Props 와 Emit – 부모 함수 사용하기

Props props 는 쉽게 생각해서 부모가 자식에게 주는 데이터이다.먼저 부모에게 물려받을 데이터를 자식 컴포넌트에 정의한다.…

8개월 ago

이자 계산기

이번에는 이자 계산기 사이트를 만들어봤습니다. 이자 계산기 바로가기 vue로 하다보니 금액이나 이자율 같은 input 태그의…

8개월 ago

[SpringBoot+Nginx+vite]유틸 사이트를 만들어봤습니다.feat.핫딜 모음

유틸 사이트로 이동 웹사이트 개설 나의 블로그의 접속자 수는 처참하지만 내가 블로그를 시작하면서생각했던 계획은 내…

9개월 ago

[GitHub] Actions로 서버에 자동배포하기

과정 시작하기에 앞서 과정부터 설명해드리겠습니다.master branch에 push 가 되면 GitHub Actions 에서소스를 build 를 하고…

9개월 ago