수업(국비지원)/JSP
[JSP] MVC MODEL2 방식 - 답변 달기(replyForm, BoardController, BoardDao, list)
byeolsub
2023. 4. 20. 23:48
📌 replyForm.jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- /jsp3/src/main/webapp/view/board/replyForm.jsp --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>답변 쓰기</title>
</head>
<body>
<hr>
<div class="container">
<form name="f" action="reply" method="post">
<%-- 답변을 등록할때 누구의 답변 글인지 알기 위해 작성 --%>
<input type="hidden" name="num" value="${board.num}">
<input type="hidden" name="boardid" value="${board.boardid}">
<input type="hidden" name="grp" value="${board.grp}">
<input type="hidden" name="grplevel" value="${board.grplevel}">
<input type="hidden" name="grpstep" value="${board.grpstep}">
<h2 id="center">게시판 답글</h2>
<div class="form-group">
<label>착성자:</label>
<input type="text" class="form-control" name="writer" value="${sessionScope.login}">
<label>비밀번호:</label>
<input type="password" class="form-control" name="pass">
<label>제목:</label>
<input type="text" class="form-control" name="subject" value="re:${board.subject}">
</div>
<div class="form-group">
<label>내용</label>
<textarea class="form-control" rows="10" cols="50" name="content"></textarea>
</div>
<div id="center" style="padding:3px;">
<button type="submit" class="btn btn-dark">입력</button>
</div>
</form>
</div>
</body>
</html>
📌 BoardController.java 추가
@RequestMapping("replyForm")
public String replyForm (HttpServletRequest request, HttpServletResponse response) {
int num = Integer.parseInt(request.getParameter("num"));
Board board = dao.selectOne(num);
request.setAttribute("board",board);
return "/view/board/replyForm.jsp";
}
📌 BoardController.java 추가
1. 파라미터 값을 Board 객체에 저장하기
원글 정보에 해당하는 파라미터 : num, boardid, grp, grplevel, grpstep
답글 정보 : writer, pass, subject, content => 입력한 내용
2. 같은 grp에 해당하는 게시물등의 grpstep을 1씩 중가하기.
원글의 grpstep보다 큰 grpstep만 증가
3. 답글에 대한 정보를 db에 추가(insert).
num : maxnum + 1
grp : 원글과 동일
grplevel : 원글 + 1
grpstep : 원글 + 1
4. 등록 성공 : 답변 등록 완료 메세지 출력 후 list로 페이지 이동
등록 실패 : 답변 등록 실패 메세지 출력 후 replyForm 페이지로 이동
@RequestMapping("reply")
public String reply (HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//1.1. 파라미터 값을 Board 객체에 저장하기
Board board = new Board();
board.setWriter(request.getParameter("writer"));
board.setPass(request.getParameter("pass"));
board.setSubject(request.getParameter("subject"));
board.setContent(request.getParameter("content"));
board.setBoardid(request.getParameter("boardid"));
board.setGrp(Integer.parseInt(request.getParameter("grp")));
int num = Integer.parseInt(request.getParameter("num"));
int grp = Integer.parseInt(request.getParameter("grp"));
int grplevel = Integer.parseInt(request.getParameter("grplevel"));
int grpstep = Integer.parseInt(request.getParameter("grpstep"));
//2. grpstep 1 증가
dao.grpStepAdd(grp,grpstep);
//3. 답글 정보 db 등록
board.setNum(dao.maxnum() + 1);
board.setGrplevel(grplevel + 1);
board.setGrpstep(grpstep + 1); //원글 다음자리
board.setFile1("");
String msg = "답변 등록 시 오류가 발생했습니다.";
String url = "replyForm?num=" + num;
if(dao.insert(board)) {
msg = "답변 등록 완료";
url = "list?boardid=" + board.getBoardid();
}
request.setAttribute("msg",msg);
request.setAttribute("url",url);
return "/view/alert.jsp";
}
📌 BoardDao.java 추가
public void grpStepAdd(int grp, int grpstep) {
String sql = "Update board set grpstep = getstep + 1 "
+ " where grp=? and grpstep > ?";
Connection conn = DBConnection.getConnection();
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,grp);
pstmt.setInt(2,grpstep);
pstmt.executeUpdate();
} catch(SQLException e) {
e.printStackTrace();
} finally {
DBConnection.close(conn, pstmt, null);
}
}
📌 list.jsp 추가
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="path" value="pageContext.request.contextPath" />
<%-- /jsp3/src/main/webapp/view/board/list.jsp --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시글 목록</title>
</head>
<body>
<!-- table list start -->
<div class="container">
<h2 id="center">${boardName}</h2>
<p align="right">
<c:if test="${boardcount > 0}">글개수:${boardcount}</c:if>
<c:if test="${boardcount == 0}">등록된 게시물이 없습니다</c:if>
</p>
<table class="table table-hover">
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>등록일</th>
<th>파일</th>
<th>조회수</th>
</tr>
</thead>
<tbody>
<c:forEach var="b" items="${list}">
<tr>
<td>${boardnum}</td>
<c:set var="boardnum" value="${boardnum - 1}"/>
<td>
<c:if test="${b.grplevel > 0}">
<img src="../image/level.gif" width="${20*(b.grplevel-1)}">
<img src="../image/re.gif">
</c:if>
<a href="info?num=${b.num}">${b.subject}</a></td>
<td>${b.writer}</td>
<td>${b.regdate}</td>
<td><a href="../upload/${b.file1}">${b.file1}</a></td>
<td>${b.readcnt}</td>
</tr>
</c:forEach>
</tbody>
</table>
<%-- 공지사항일 경우 관리자만 게시글 입력 부분 나오게 처리 --%>
<c:if
test="${(param.boardid != 1)||(sessionScope.login =='admin') }">
<p align="right"><a href="writeForm">게시글입력</a></p>
</c:if>
<%-- 페이징 부분 --%>
<div class="container" >
<ul class="pagination justify-content-center" >
<li class="page-item
<c:if test='${startPage <= bottomLine}'>disabled</c:if>">
<a class="page-link" href="list?pageNum=${startPage-bottomLine}">
Previous</a></li>
<c:forEach var="i" begin="${startPage}" end="${endPage}">
<li class="page-item <c:if test='${i==pageInt}'> active </c:if>">
<a class="page-link" href="list?pageNum=${i}">${i}</a>
</li></c:forEach>
<li class="page-item
<c:if test='${endPage >= maxPage}'>disabled</c:if>">
<a class="page-link" href="list?pageNum=${startPage+bottomLine}">
Next</a></li>
</ul> </div>
</div>
<!-- table list end -->
</body>
</html>