게으른 완벽주의자의 개발자 도전기
[board] 게시글 수정하기 본문
1. controller
board_detail.html에서 아래 버튼 눌렀을 때 수정페이지로 이동하도록 설정했다.
<button type="button" class="btn btn-outline-info"
th:onclick="|location.href = '@{/board/updatePage(boardNum=${boardDetail.boardNum})}'|">
수정하기</button>
수정페이지로 이동하기
@GetMapping("/updatePage")
public String updateBoard(int boardNum, Model model) {
model.addAttribute("update", boardService.boardDetail(boardNum));
return "content/updateBoard";
}
2. updateBoard.html
<body>
<div layout:fragment="content" th:object="${update}">
<div class="row justify-content-center">
<div class="col-6">
<form th:action="@{/board/updateBoard}" method="post">
<div class="mb-3">
<label for="formGroupExampleInput" class="form-label">글번호</label>
<input type="text" class="form-control" id="formGroupExampleInput"
th:field="*{boardNum}" readonly>
<label for="formGroupExampleInput" class="form-label">제목</label>
<input type="text" class="form-control" id="formGroupExampleInput"
th:field="*{title}">
<label for="formGroupExampleInput" class="form-label">작성일</label>
<input type="text" class="form-control" id="formGroupExampleInput"
th:field="*{createDate}" readonly>
<label for="formGroupExampleInput" class="form-label">작성자</label>
<input type="text" class="form-control" id="formGroupExampleInput"
th:value="${session.loginInfo.memberName}" readonly>
</div>
<label for="formGroupExampleInput" class="form-label">내용</label>
<div class="form-floating">
<textarea class="form-control" placeholder="내용을 입력하세요"
id="floatingTextarea2" style="height: 300px"
th:field="*{content}"></textarea>
</div>
<div class="row">
<div class="col text-center">
<button type="button" class="btn btn-outline-info"
th:onclick="|location.href = '@{/board/list}'|">뒤로가기</button>
<button type="submit" class="btn btn-outline-info">수정하기</button>
<button type="button" class="btn btn-outline-info"
th:onclick="|location.href = '@{/board/deleteBoard(boardNum=${update.boardNum})}'|">
삭제하기</button>
</div>
</div>
</form>
</div>
</div>
</div>
3. mapper/ service
<update id="updateBoard">
UPDATE BOARD
SET TITLE = #{title}
, CONTENT = #{content}
WHERE BOARD_NUM = #{boardNum}
</update>
@Override
public void updateBoard(BoardVO board) {
sqlSession.update("boardMapper.updateBoard", board);
}
4. controller
수정하기
@PostMapping("/updateBoard")
public String updateBoard(BoardVO boardVO) {
boardService.updateBoard(boardVO);
return "redirect:/board/boardDetail?boardNum="+ boardVO.getBoardNum();
}
redirect를 사용하면 일반적으로 데이터(model데이터)를 가져가지 못하기에 위와 같이 get방식으로 데이터를 넘긴다.
그러나 get방식을 사용하면 url 창에 무슨 데이터를 가져가는지 파악이 가능하기에 보안상 좋지 못하다.
이를 방지하기 위해서 addFlashAttribute를 사용하여 데이터를 넘길 수 있다.
@PostMapping("/updateBoard")
public String updateBoard(BoardVO boardVO , RedirectAttributes redirectAttributes) {
boardService.updateBoard(boardVO);
redirectAttributes.addFlashAttribute("boardNum", boardVO.getBoardNum());
return "redirect:/board/boardDetail";
}
'Spring Boot' 카테고리의 다른 글
전화번호(tell) 자바 문자열 치환(replace함수) (0) | 2022.09.21 |
---|---|
[board] 게시글 삭제하기 (0) | 2022.09.21 |
[board] 게시글 상세페이지 (th:object, th:field) (0) | 2022.09.19 |
[board] 게시글 목록 (0) | 2022.09.19 |
[board] 게시글 등록하기 (session 데이터, validation 처리) (0) | 2022.09.19 |