스프링 부트 프로젝트가 전체 동기식이라 부분 부분 비동기식으로 고치는 중이었습니다.
우선 댓글 작성의 경우입니다. 댓글 작성할 때마다 화면을 reload하면 불편하고 수행 능력이 떨어지기 때문에 이 부분을 수정하고자 했습니다.
Asynchronos Javascript And XML의 약자로 비동기식으로 서버와 통신하는 방식을 의미합니다.
hidden의 내용과 작성된 내용을 ajax로 보내서 controller 갑니다.
서버에서 댓글 리스트를 받아와서 th:each로 각각을 출력하는 코드입니다.
각각의 value를 가져오는 방법은 더 다양하지만 일단은 id로 value를 가져오는 방법으로 했습니다.
CSS와 기타 멤버 필드는 생략하고 가져왔습니다.
서버에서 클라이언트로 응답 데이터를 전송하기 위해서 @ResponseBody 를 사용하여 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송시키는 역할을 합니다.
이제 view에서 버튼을 만들어 onclick으로 ajax 메소드를 호출합니다.
그럼 다음처럼 commentList가 비동기식으로 갱신됩니다.
위에선 각각 id로 받아왔는데 serialize로 받아올 수도 있습니다.
var commentBean = $("#commentForm").serialize();
위처럼 form의 id를 이용해 serialize할 수 있습니다.
각각 input에 name를 제대로 지정해야 오류 없이 수행할 수 있습니다.
<input type="hidden" name="EMAIL" th:value="${userInform.userEmail}">
<input type="hidden" name="POST_NUM" th:value="${resultMap.POST_NUM}">
<input type="hidden" name="CATEGORY_NAME" th:value="${resultMap.CATEGORY_NAME}">
위처럼 있다고 할 때, serialize하면 다음처럼 됩니다.
EMAIL=cofls749%40naver.com&POST_NUM=1&CATEGORY_NAME=free
name에 유의해주시고, controller에서도 이대로 보내지니 controller에서도 유의해서 오류 없이 진행하면 됩니다.
참조
- Model: https://memories95.tistory.com/109
- RequestMapping, RequestParam: https://sarc.io/index.php/development/1139-requestmapping
- ResponseBody: https://webdevtechblog.com/reqeustbody
감사합니다.
Text by Chaelin. Photographs by Chaelin, Unsplash.