1. View 만들기
수정 페이지는 게시글 작성 페이지와 동일하게 만든다.
updateForm.mustache
{{> layout/header}}
<div class="container p-5">
<div class="card">
<div class="card-header"><b>수정하기 화면입니다</b></div>
<div class="card-body">
<form action="/board/1/update" method="post" enctype="application/x-www-form-urlencoded">
<div class="mb-3">
<input type="text" class="form-control" placeholder="Enter title" name="title" value="제목1">
</div>
<div class="mb-3">
<textarea class="form-control" rows="5" name="content">내용1</textarea>
</div>
<button type="submit" class="btn btn-primary form-control">수정완료</button>
</form>
</div>
</div>
</div>
{{> /layout/footer}}

/board/1/updateForm 을 접속하면 수정 페이지가 만들어진다. 현재는 제목과 내용을 임의로 만들었지만 실제 수정은 DB에서 원 글의 데이터를 가져와야 한다.
<textarea> 내에는 mustache 문법을 사용할 수 없다.
2. 컨트롤러 만들기
게시글의 DB를 조회하기 위해 URL 에 id 를 변수로 입력받아야 한다.
@GetMapping("/board/{id}/updateForm")
public String updateForm(@PathVariable int id){
return "board/updateForm";
}
수정 전 인증 체크와 권한 체크가 필요하다.
//인증 체크. 로그인이 되어있는지 확인
User sessionUser = (User) session.getAttribute("sessionUser");
if(sessionUser==null){
return "redirect:/loginForm";
}
//DB 조회
Board board = boardRepository.findByIdCheck(id);
// 권한 체크
if(board.getUserId()!=sessionUser.getId()){
request.setAttribute("status",403);
request.setAttribute("msg","게시글을 수정할 권한이 없습니다.");
return "error/40x";
}
boardRepository 를 통해 DB를 조회한다. 따로 메서드를 만들지 않고 , 게시글 삭제 때 만들었던
findByIdCheck
를 활용한다.board/BoardRepository
public Board findByIdCheck(int id){
Query query = em.createNativeQuery("select * from board_tb where id = ?",Board.class);
query.setParameter(1, id);
Board board = (Board) query.getSingleResult();
return board;
}

로그인을 하지 않고 /board/1/updateForm 을 접속하면 로그인 페이지로 리다이렉션 된다.
@GetMapping("/board/{id}/updateForm")
public String updateForm(@PathVariable int id,HttpServletRequest request){
//인증 체크
User sessionUser = (User) session.getAttribute("sessionUser");
if(sessionUser==null){
return "redirect:/loginForm";
}
//DB 조회
Board board = boardRepository.findByIdCheck(id);
// 권한 체크
if(board.getUserId()!=sessionUser.getId()){
request.setAttribute("status",403);
request.setAttribute("msg","게시글을 수정할 권한이 없습니다.");
return "error/40x";
}
//가방에 담기
request.setAttribute("board",board);
return "board/updateForm";
}
마지막으로 리퀘스트 객체에 데이터를 담아 View 로 전달한다.
3. View 수정
updateForm.mustache
{{> /layout/header}}
<div class="container p-5">
<div class="card">
<div class="card-header"><b>수정하기 화면입니다</b></div>
<div class="card-body">
<form action="/board/{{board.id}}/update" method="post" enctype="application/x-www-form-urlencoded">
<div class="mb-3">
<input type="text" class="form-control" placeholder="Enter title" name="title" value="{{board.title}}">
</div>
<div class="mb-3">
<textarea class="form-control" rows="5" name="content">{{board.content}}</textarea>
</div>
<button type="submit" class="btn btn-primary form-control">수정완료</button>
</form>
</div>
</div>
</div>
{{> /layout/footer}}
페이지 번호는 {{board.id}} , 제목은 {{board.title}} , 내용은 {{board.content}} 를 사용해 동적으로 페이지를 출력한다.
detail.mustache
{{#owner}}
<!-- 수정삭제버튼 -->
<div class="d-flex justify-content-end">
<a href="/board/{{board.id}}/updateForm" class="btn btn-warning me-1">수정</a>
<form action="/board/{{board.id}}/delete" method="post">
<button class="btn btn-danger">삭제</button>
</form>
</div>
{{/owner}}
버튼도 동작될 수 있도록 수정한다. <form> 태그를 사용해도 되지만, get 요청은 <a> 태그를 사용해 하이퍼링크로 전달할 수도 있다.

수정 페이지를 들어가면 게시글 번호에 따라 내용이 동적으로 내용이 달라진다.
Share article