본문 바로가기
프로젝트/게시판

[SpringBoot] 게시판 8. 게시글 수정 기능 구현

by qkzkdo 2023. 8. 4.
728x90

구현 순서

1. board-detail.html 

2. board-edit.html

3. BoardController

4. BoardService

5. BoardServiceProcess

6. BoardMapper

7. board-mapper.xml

8. 게시글 수정 구현 화면

 

 

 

 

1. board-detail.html

상세페이지에 수정페이지로 이동할 <a> 태그 작성

<a th:href="|/board/edit/page?no=${detail.no}|">수정하기</a>

 

2. board-edit.html

수정페이지 <form> 태그 작성

<body>
    <div>
        <h3>상품 수정 페이지</h3>
        <p>글번호: <span th:text="${detail.no}"></span>번</p>
        <div>
            <form th:action="|/board/edit/${detail.no}|" method="post">
                <p>
                    <input type="text" name="title" placeholder="제목">
                </p>
                <p>
                    <textarea rows="5" cols="50" name="content" placeholder="내용"></textarea>
                </p>
                <p>
                    <input type="hidden" name="_method" value="PUT">
                    <button type="submit">수정완료</button>
                </p>
            </form>
        </div>
    </div>
</body>
  • th:text="${detail.no}" : 컨트롤러에서 전달된 detail.no 값을 표시
  • th:action="|/board/edit/${detail.no}|" : 폼이 제출될 때 요청이 전송되는 경로를 지정한다. ${detail.no}를 사용하여 동적으로 경로를 생성
  • <input type="hidden" name="_method" value="PUT"> : HTTP 메소드를 PUT로 지정하기 위한 숨겨진 입력 필드
    일반적으로 HTML의 <form> 요소는 GET 또는 POST 메소드만 지원함

 

 

3. BoardController

수정 페이지 이동, 게시글 수정 메서드 작성

//게시글 수정 페이지 이동
@GetMapping("/board/edit/page")
public String boardEditPage(@RequestParam long no, Model model) {
    service.boardEditPageMove(no, model);
    return "board/board-edit";
}

//게시글 수정
@PutMapping("/board/edit/{no}")
public String boardEdit(@PathVariable long no, BoardDTO dto) {
    service.boardEditProcess(no, dto);
    return "redirect:/board-list";
}
  • 수정페이지로 이동할 때 쿼리스트링 파라미터를 활용하여 no 값을 매개변수로 가져온다.

 

 

4. BoardService

BoardService 인터페이스에 메서드 선언

//게시글 수정 페이지 이동
void boardEditPageMove(long no, Model model);

//게시글 수정
void boardEditProcess(long no, BoardDTO dto);

 

 

5. BoardServiceProcess

BoardService 인터페이스의 메서드 구현

//게시글 수정 페이지 이동
@Override
public void boardEditPageMove(long no, Model model) {
    model.addAttribute("detail", mapper.findByNo(no));
}

//게시글 수정
@Override
public void boardEditProcess(long no, BoardDTO dto) {
    mapper.updateByNo(no, dto);
}

 

 

6. BoardMapper

XML 파일에 정의된 쿼리를 호출할 updateByNo() 메서드 선언

void updateByNo(@Param("no") long no, @Param("dto") BoardDTO dto);

 

 

 

7. board-mapper.xml

<update id="updateByNo">
    update board set title = #{dto.title}, content = #{dto.content}
    where no = #{no}
</update>

 

 

8. 게시글 수정 구현 화면

 

728x90