본문 바로가기
프로그래밍/SpringBoot

[스프링 부트 게시판] 게시글 수정 만들기

by 소소로드 2020. 9. 30.

게시글 수정 만들기

게시글 수정은 어디에서 할까. 바로 boardRead부분이다.
보통 우선 목록에서 읽고 싶은 글을 클릭하고, 그 안에 수정/삭제 버튼이 있게된다.


boardRead

<button id="modify" onclick="location.href='boardModifyForm?num=${data.num}'">수정</button>
<button id="delete" onclick="location.href='boardDelete?num=${data.num}'">삭제</button> 

이 소스에 주목할 필요가 있다.
전 글쓰기와 마찬가지로 num이라는 파라미터를 이용한다는 것을 알 수 있다.

순서
1. 수정을 눌러서 수정폼으로 들어간다.
2. 글읽기창과 동일한 내용의 폼이 있으면 깔끔할 것이다.
   글읽기 창에 대부분 readonly(수정불가)가 붙었으므로 그것만 제거한다.
3.수정폼에서 수정완료를 누르면 데이터가 변경되면서 리스트화면으로 돌아간다.



1. 수정폼 만들기

BoardController

1
2
3
4
5
6
7
8
// 게시글 수정폼
    @RequestMapping(value="/boardModifyForm")
    public String boardModifyForm(@RequestParam("num"int num, Model model) throws Exception {
 
        BoardVO data = boardService.boardRead(num);
        model.addAttribute("data", data);    
        return "boardModifyForm";
    }
cs

전 차와 마찬가지로 boardRead에서 num을 가져와 사용한다.
boardService.boardRead(num); 이 부분을 사용하는 이유는
boardRead의 데이터를 재활용하여 읽기폼 / 수정폼을 동일하게 하기 위해서이다.


BoardService

1
2
3
4
 // 게시글 수정폼
     public void boardModifyForm(int num) throws Exception {
            boardMapper.boardModifyForm(num);
     }
cs


BoardMapper

1
2
// 게시글 수정폼
     public void boardModifyForm(int num) throws Exception;
cs


boardModifyForm

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
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<script src='https://code.jquery.com/jquery-3.3.1.min.js'></script>
<html>
<head>
<head>
</head>
<body>
<h2>[게시판 수정]</h2>
<form action='<c:url value='/boardModify'/>' method="post">
    <div><label>글번호</label>
         <input name="num" readonly="readonly" value="${data.num}">
    </div>
    <div><label>작성자</label>
         <input name="writer" readonly="readonly" value="${data.writer}">
    </div>
    <div>
        <label>제목</label>
        <textarea rows="5" cols="13" name="title">${data.title}</textarea>
    </div>
    <div>
        <label>내용</label>
        <textarea rows="5" cols="13" name="content">${data.content}</textarea>
    </div>
    <button type="submit">수정완료</button>
    <button type="button" onclick="location.href='boardList'">돌아가기</button>
</form>
<input type="hidden" name="num" value="${data.num}">
</body>
</html>
cs

boardRead와 거의 동일하지만 제목, 내용부분은 readonly가 제거되어 
수정할 수 있다는 것을 알 수 있다.

여기까지의 내용은 말그대로 수정할 수 있는 틀을 만들어준 것이다.




2. 게시글 수정 만들기

게시글의 내용을 수정하고 수정완료를 누르면 들어가는 곳은 
<form action='<c:url value='/boardModify'/> 바로 이곳이다.

BoardController

1
2
3
4
5
6
7
8
// 게시글 수정
    @RequestMapping(value="/boardModify", method= RequestMethod.POST)
    public String boardModify(BoardVO boardVO) throws Exception {
        
        boardService.boardModify(boardVO);
    
        return "redirect:boardList";
    }
cs

수정폼으로 들어갈때는 단순히 num 파라미터를 이용했지만
내용 자체를 수정하는 일이므로 BoardVO를 이용하였다.
수정이 완료될 경우에는 목록으로 되돌아가도록 구현하였다.


BoardService

1
2
3
4
// 게시글 수정
     public void boardModify(BoardVO boardVO) throws Exception {
            boardMapper.boardModify(boardVO);
     }
cs


BoardMapper

1
2
// 게시글 수정
     public void boardModify(BoardVO boardVO) throws Exception;
cs


BoardMapper.xml

1
2
3
4
5
6
7
<update id="boardModify" parameterType="BoardVO">
        UPDATE hello_board
        SET title = #{title},
            content = #{content},
            regdate = now()
        WHERE num = #{num}
    </update>
cs

이렇게 하나하나 매칭해서 update문을 써준다.