위로 아래

글 작성 페이지 수정

답글은 페이지를 따로 만들지 않고 글 작성 페이지를 같이 쓴다.

답글을 누르면 제목 앞에 [답글]이 나오도록 한다.

우선 컨트롤러에 주소를 추가해준다.

switch(command) {
	
    	...

    case "reply" : {
        page = "view/BoardWriteForm.jsp";
        break;
    }

    	...
    
}

 

 

글 작성 페이지에 태그라이브러리를 넣어준다

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 

글 작성 페이지 로딩 후, 

bno가 이미 있으면 알아서 답글로 분류,

dto 정보가 아예 없으면 새글로 분류한다.

<tr>
    <th>제목</th>
    <c:choose>
        <c:when test="${dto.bno==0}">
            <td><input type="text" name="subject" class="chk" title="제목"></td>
        </c:when>
        <c:when test="${dto!=null}">
            <td><input type="text" name="subject" class="chk" title="제목" value="[답글]"></td>
        </c:when>
    </c:choose>
</tr>

 

답글로 분류된 경우엔 제목 앞에 [답글] 글씨를 미리 써놓고,

새글로 분류된 경우엔 원래처럼 빈 칸으로 설정한다.

 

답글로 분류된 경우 제목에 [답글]이 쓰여 있는 걸 볼 수 있다.

 

 

 

답글 제목에 이전 제목 붙이기

답글 페이지에 파라미터를 넘겨줄 글 보기 페이지를 수정한다.

form 태그 맨 밑에 hidden으로 subject를 넣는다.

<form>
<input type="hidden" name="bno" value="${dto.bno}">
<input type="hidden" name="bref" value="${dto.bref}">
<input type="hidden" name="bstep" value="${dto.bstep}">
<input type="hidden" name="blevel" value="${dto.blevel}">
<input type="hidden" name="subject" value="${dto.subject}">
</form>

 

컨트롤러에서 주소 이동 전, DTO 객체를 생성해 제목을 포함한 여러 요소의 파라미터를 저장한다.

case "reply" : {
    BoardDTO dto = new BoardDTO();
    dto.setBno(Integer.parseInt(request.getParameter("bno")));
    dto.setBref(Integer.parseInt(request.getParameter("bref")));
    dto.setBstep(Integer.parseInt(request.getParameter("bstep")));
    dto.setBlevel(Integer.parseInt(request.getParameter("blevel")));
    dto.setSubject(request.getParameter("subject"));
    request.setAttribute("dto", dto);
    page = "view/BoardWriteForm.jsp";
    break;
}

 

input 태그의 value 값에 저장된 답글 옆에 가져온 subject 값을 넣어준다.

<c:when test="${dto!=null}">
    <td><input type="text" name="subject" class="chk" title="제목" value="[답글] ${dto.subject}"></td>
</c:when>

 

답글을 누르면 이전 제목도 같이 써져 있는 것을 확인할 수 있다.

 

 

 


전체 코드

더보기
<!-- BoardWriteForm.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri = "http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 작성</title>
<link rel="stylesheet" type="text/css" href="css/Form.css">
<script src="jquery/jquery-3.7.0.min.js"></script>
<script type="text/javascript">
	$().ready(function(){
		$("#submit11").on("click",function(){
			if(validate()){
				$("form[name=form1]").submit();
			}
		})
	})
	function validate(){
		let flen = $("form[name=form1] .chk").length;
		for(i=0;i<flen;i++){
			if($(".chk").eq(i).val()=="" || 
					$(".chk").eq(i).val()==null || 
					$(".chk").eq(i).val().trim()==""){
				alert($(".chk").eq(i).attr("title") + "은 꼭 입력해주세요.");
				$(".chk").focus();
				return false;
			}
		}
		return true;
	}
</script>
</head>
<body>
<form name="form1" method="post" action="jb?command=writeAction">
<table>
	<tr><td colspan="2"><h3>게시글 쓰기</h3></td></tr>
	<tr>
		<th>제목${dto.subject}</th>
		<c:choose>
			<c:when test="${dto.bno==0}">
				<td><input type="text" name="subject" class="chk" title="제목"></td>
			</c:when>
			<c:when test="${dto!=null}">
				<td><input type="text" name="subject" class="chk" title="제목" value="[답글] ${dto.subject}"></td>
			</c:when>
		</c:choose>
	</tr>
	<tr>
		<th>작성자</th>
		<td><input type="text" name="writer" class="chk" title="작성자"></td>
	</tr>
	<tr>
		<th>글 내용</th>
		<td><textarea name="content" class="chk" title="글내용"></textarea></td>
	</tr>
	<tr>
		<th>비밀번호</th>
		<td><input type="password" name="passwd" class="chk" title="비밀번호"></td>
	</tr>
	<tr>
		<td colspan="2">
			<input class="btn" type="button" value="글 저장" id="submit11">
			<input class="btn" type="button" value="글 목록" onclick="location.href='jb?command=list'">
		</td>
	</tr>
</table>
</form>
</body>
</html>
<!-- BoardContent.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${dto.subject}</title>
<link rel="stylesheet" type="text/css" href="css/Form.css">
<script src="jquery/jquery-3.7.0.min.js"></script>
<script type="text/javascript">
	$().ready(function(){
		let f = $("form[name=form1]");
		$("#re").on("click",function(){
			if(checkpw()){
				f.attr("action","jb?command=update");
				f.submit();
			}
		})
		$("#de").on("click",function(){
			if(checkpw()){
				if(confirm("정말 삭제하시겠습니까?")){
					f.attr("action","jb?command=delete");
					f.submit();					
				}
			}
		})
		$("#reply").on("click",function(){
			f.attr("action","jb?command=reply");
			f.submit();
		})
	})
	
	function checkpw(){
		let user_passwd = prompt("비밀번호를 입력하시오.");
		let com_passwd = ${dto.passwd}; 
		if(user_passwd == com_passwd) {
			return true;
		} else {
			alert("비밀번호가 틀렸습니다.");
			return false;
		}
	}
</script>
</head>
<body>
<form name="form1" method="post" action="">
<table>
	<tr><td colspan="2"><h3>${dto.subject}</h3></td></tr>
	<tr>
		<th>작성자</th>
	<td><input type="text" name="writer" title="작성자" value="${dto.writer}" readonly="readonly"></td>
	</tr>
	<tr>
		<th>글 내용</th>
		<td><textarea name="content" title="글내용" readonly="readonly">${dto.content}</textarea></td>
	</tr>
	<tr>
		<th>비밀번호</th>
		<td><input type="password" name="passwd" readonly="readonly" title="비밀번호" value = "${dto.passwd}"></td>
	</tr>
	<tr>
		<td colspan="2">
			<input class="btn" type="button" value="글 수정" id="re">
			<input class="btn" type="button" value="글 삭제" id="de">
			<input class="btn" type="button" value="답글" id="reply">
			<input class="btn" type="button" value="글 목록" onclick="location.href='jb?command=list'">
		</td>
	</tr>
</table>
<input type="hidden" name="bno" value="${dto.bno}">
<input type="hidden" name="bref" value="${dto.bref}">
<input type="hidden" name="bstep" value="${dto.bstep}">
<input type="hidden" name="blevel" value="${dto.blevel}">
<input type="hidden" name="subject" value="${dto.subject}">
</form>
</body>
</html>
//BoardController

package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.BoardDTO;

/**
 * Servlet implementation class BoardController
 */
@WebServlet("/jb")
public class BoardController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BoardController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String command = null;
		String page = null;
		if(request.getParameter("command")==null)
			command = "list";
		else
			command = request.getParameter("command");
		
		switch(command) {
			case "list" : {
				page = "action/BoardListAction.jsp";
				break;
			}
			case "writeForm" : {
				page = "view/BoardWriteForm.jsp";
				break;
			}
			case "writeAction" : {
				page = "action/BoardWriteAction.jsp";
				break;
			}
			case "content" : {
				page = "action/BoardContentAction.jsp";
				break;
			}
			case "update" : {
				page = "action/BoardUpdateAction.jsp";
				break;
			}
			case "updateProc" : {
				page = "action/BoardUpdateProc.jsp";
				break;
			}
			case "delete" : {
				page = "action/BoardDeleteAction.jsp";
				break;
			}
			case "reply" : {
				BoardDTO dto = new BoardDTO();
				dto.setBno(Integer.parseInt(request.getParameter("bno")));
				dto.setBref(Integer.parseInt(request.getParameter("bref")));
				dto.setBstep(Integer.parseInt(request.getParameter("bstep")));
				dto.setBlevel(Integer.parseInt(request.getParameter("blevel")));
				dto.setSubject(request.getParameter("subject"));
				request.setAttribute("dto", dto);
				page = "view/BoardWriteForm.jsp";
				break;
			}
			
			default : {
				page = "view/Error.jsp";
				break;
			}
		}
		
		RequestDispatcher dp = request.getRequestDispatcher(page);
		dp.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}