[무한댓글 게시판] 5. CRUD
소셜 게시판 로그인을 먼저 해주었다.
그리고 게시판으로 가자.
게시글 상세 페이지 이동
글 번호를 누르면 해당 상세페이지로 이동을 한다
해당 게시글의 board_id 컬럼 값을 전달 해주어 받아서 해당 게시글의 상세페이지를 반환 한다.
로직은 아래와 같다.
BoardController.java
우선 controller다.
BoardSevice.java
@RequestParam으로 board_id 컬럼을 요청해서 변수 board_id로 넣어줘서 사용을해서 해당 BoardService에 만들어둔 selectDetail 메서드로 해당 게시글을 반환하는 변수를 만들어서 model.attribute로 boardDetail에 넣어주었다. 따라서 jsp파일에서 boardDetail을 사용할수 있게 되었다.
boardDetail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>소셜로그인 게시판</title>
</head>
<body>
<div id="wrap">
<h2>게시글 상세페이지</h2>
<table>
<c:if test="${not empty requestScope.boardDetail}">
<tr height="40">
<th>게시글 번호</th>
<td>${requestScope.boardDetail.board_id}</td>
</tr>
<tr height="40">
<th>게시글 제목</th>
<td>${requestScope.boardDetail.board_title}</td>
</tr>
<tr height="40">
<th>게시글 내용</th>
<td>${requestScope.boardDetail.board_content}</td>
</tr>
<tr height="40">
<th>작성자</th>
<td>${requestScope.boardDetail.useremail}</td>
</tr>
<tr height="40">
<th>등록일</th>
<td>${requestScope.boardDetail.board_regdate}</td>
</tr>
<tr height="40">
<th>좋아요수</th>
<td>${requestScope.boardDetail.board_likes}</td>
</tr>
<tr height="40">
<th>조회수</th>
<td>${requestScope.boardDetail.board_views}</td>
</tr>
<tr height="40">
<th>게시글 수정일자</th>
<td>${requestScope.boardDetail.board_moddate}</td>
</tr>
</c:if>
</table>
<div>
<a href="boardModify?board_id=${requestScope.boardDetail.board_id}">수정하기</a>
</div>
<div class="home-link">
<a href="boardPage">게시판 목록</a>
</div>
<div class="home-link">
<a href="/home">Home</a>
</div>
</div>
</body>
</html>
${requestScope.boardDetail.컬럼명}으로 board_id값에 해당하는 게시글의 컬럼을 반환할 수 있었다.
1. 새글 작성
새글을 작성하는 페이지(jsp)와 그에 맞는 로직을 작성해보자.
BoardController.java
우선 새글 등록 페이지로 가는 getBoardInsert 메서드이다. 메서드 구현부분은 넣지 않아 간단하여 설명은 생략하겠다.
jsp 파일에서 form데이터를 post(Action)으로 값을 넘겨주기 때문에 @PostMapping으로 값을 받아온다.
uri 변수를 생성해주고
새로 작성된 게시글은 board_delyn 속성을 'N'으로 설정되게 해주었다. (글 삭제여부 옵션)
entity.setBoard_regdate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
int savedId = boardService.save(entity);
등록된 글의 등록일을 우선 entity에 저장을 해주었다.
그리고 그 값이 0보다 크면 (=값이 있으면) 등록이 되게끔 로직을 짜주었다.
시연동영상
2. 글 수정
BoardController.java
우선 수정페이지로 가는 getBoardModify 메서드이다. 게시글 상세페이지 로직이랑 동일하여 상세설명은 생략하겠다.
역시나 jsp 파일에서 form데이터를 post(Action)으로 값을 넘겨주기 때문에 @PostMapping으로 값을 받아온다.
수정된 데이터를 updateBoard에 넣어주었다. updateBoard에 값을 save 메서드로 저장해주고
그 값이 0보다 크면 (무결성이 깨지면, 수정데이터가 있다면) board_moddate 속성이 수정날짜로 업데이트 되고 변경사항을 저장해준다.
boardModify.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>소셜로그인 게시판</title>
</head>
<body>
<div id="wrap">
<h2>게시글 상세페이지</h2>
<!-- 수정할 내용 입력 폼 -->
<form action="updateBoard" method="post" enctype="multipart/form-data">
<table>
<tr>
<th>게시글 제목</th>
<td><input type="text" name="board_title"
value="${requestScope.boardModify.board_title}"> <input
type="hidden" name="board_id"
value="${requestScope.boardModify.board_id}"></td>
</tr>
<tr>
<th>게시글 내용</th>
<td><textarea rows="5" cols="50" id="board_content"
name="board_content">${requestScope.boardModify.board_content}</textarea>
</tr>
<tr height="40">
<th>작성자 (수정불가)</th>
<td><input type="hidden" name="useremail"
value="${requestScope.boardModify.useremail}">${requestScope.boardModify.useremail}</td>
</tr>
<tr height="40">
<th>등록일 (수정불가)</th>
<td><input type="hidden" name="board_regdate"
value="${requestScope.boardModify.board_regdate}">${requestScope.boardModify.board_regdate}</td>
</tr>
<tr height="40">
<th>좋아요수</th>
<td><input type="hidden" name="board_likes"
value="${requestScope.boardModify.board_likes}">${requestScope.boardModify.board_likes}</td>
</tr>
<tr height="40">
<th>조회수</th>
<td><input type="hidden" name="board_views"
value="${requestScope.boardModify.board_views}">${requestScope.boardModify.board_views}</td>
</tr>
<tr height="40">
<th>게시글 수정일자</th>
<td><input type="hidden" name="board_moddate"
value="${requestScope.boardModify.board_moddate}">${requestScope.boardModify.board_moddate}</td>
</tr>
<tr>
<td><input type="submit" value="수정"></td>
</tr>
</table>
<div class="home-link">
<a href="boardPage">게시판 목록</a>
</div>
<div class="home-link">
<a href="/home">Home</a>
</div>
</form>
<form action="deleteBoard" method="post">
<input type="hidden" name="board_id" value="${requestScope.boardModify.board_id}">
<input type="hidden" name="board_delyn" value="${requestScope.boardModify.board_delyn}">
<button type="submit">게시글 삭제하기</button>
</form>
</div>
</body>
</html>
시연동영상
3. 글 삭제
본 프로젝트는 글을 삭제 했을 때 실제로 데이터 테이블에서 글이 삭제되는 것이 아니라. board_delyn 컬럼 값이 'N'에서 'Y'로 바뀌면서 작성해두었던 query 문에 필터링되어서 select 되지 않아 UI에서 보이지 않는 것이다.
따라서 delete 메서드를 작성하는 것이 아니라 board_delyn 컬럼 값이 'N'에서 'Y'로 바꾸는 로직을 짤 것이다.
BoardController.java
간단히 board_delyn 컬럼 값이 'N'에서 'Y'로 바꾸어서 boardService에 값을 저장을 해주었다.
시연동영상