수업(국비지원)/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>