Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

게으른 완벽주의자의 개발자 도전기

[board] 게시글 수정하기 본문

Spring Boot

[board] 게시글 수정하기

머리방울 2022. 9. 19. 21:21

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";
}