th:onclick을 사용해서 location=href 를 사용해야하는데 "" 와 '' 구분을 두는 것이 보기 안좋기때문에 ||(리터럴 대체) 를 사용하고 model로 넘겨받은 board 데이터를 url 주소의 일부로 사용하기위해서 ${} 사용
<button type="button" th:onclick="|location.href='@{/board/modifyForm/{boardId}(boardId=${board.id})}'|" class="btn btn-warning">글 수정 </button>
controller
@GetMapping("/user/modifyForm")
public String modifyForm(Model model, @AuthenticationPrincipal PrincipalDetail principalDetail) {
User user = principalDetail.getUser();
model.addAttribute("loginUser", user);
return "/user/modifyForm";
}
modifyForm.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/default_layout}">
<div layout:fragment="content">
<!-- Section-->
<section class="container">
<h1>글 수정</h1>
<form action="/board/modify" method="post">
<div class="form-group">
<label for="title"> 제목 : </label>
<input type="hidden" th:value="${board.id}", name="id">
<input type="text" class="form-control" id="title" th:value="${board.title}" name="title">
</div>
<br>
<div class="form-group">
<label for="summernote"> 내용 : </label>
<textarea id="summernote" name="content" >[[${board.content}]]</textarea>
</div>
</br>
<button type="submit" class="btn btn-primary">수정하기</button>
</form>
<script>
// 메인화면 페이지 로드 함수
$(document).ready(function () {
$('#summernote').summernote({
placeholder: '내용을 작성하세요',
height: 400,
maxHeight: 400
});
});
</script>
</section>
</div>
modifyForm으로 이동하면 원래 쓰여있던 게시글의 제목과 내용을 보여주고 수정 가능하도록 설정
수정된 정보를 /board/modify로 전송
controller
@PostMapping("/board/modify")
public String modify(@ModelAttribute BoardModifyDto boardModifyDto, Model model,@AuthenticationPrincipal PrincipalDetail principalDetail) {
User loginUser = principalDetail.getUser();
System.out.println("================================="+boardModifyDto);
Board board=boardService.modify(boardModifyDto);
model.addAttribute("board", board);
model.addAttribute("loginUser", loginUser);
return "/board/detail";
}
service
@Transactional
public Board modify(BoardModifyDto boardModifyDto) {
Board board = boardRepository.findById(boardModifyDto.getId()).get();
board.setTitle(boardModifyDto.getTitle());
board.setContent(boardModifyDto.getContent());
boardRepository.save(board);
return board;
}
수정완료후 다시 /board/detail인 상세페이지로 가는데 이때 redirect를 통해서 controller를 통해서 html로 접근하게된다면 Hit 인 조횟수가 1올라가기때문에 바로 html로 이동하도록 한다.
controller
@GetMapping("/board/detail/{boardId}")
public String detailForm(@PathVariable int boardId, Model model, @AuthenticationPrincipal PrincipalDetail principalDetail) {
User loginUser = principalDetail.getUser();
Board board = boardService.detail(boardId);
model.addAttribute("board", board);
model.addAttribute("loginUser", loginUser);
return "/board/detail";
}
service
@Transactional
public Board detail(int boardId) {
Board board = boardRepository.findById(boardId).get();
board.setHit(board.getHit()+1);
return board;
}
게시글 수정 및 삭제 완료