위로 아래

글 수정 매커니즘

글 수정도 글 보기 페이지처럼 데이터베이스에서 데이터를 불러와야 하고,

불러온 데이터를 수정해 다시 데이터베이스에 데이터를 수정해야 한다.

두 차례 데이터베이스에 접근해야 하니, model 역할을 하는 action 폴더의  jsp 파일도 두 개가 된다.

 

 

 

데이터베이스에서 데이터 불러오기

글 수정에 데이터를 불러오는 방법은

글 보기에 데이터를 불러오는 방법과 같다.

글 보기 페이지를 위해 만들었던 DAO의 getArticle() 메소드를 사용한다.

BoardUpdateAction.jsp는 다음과 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="bean.BoardDAO" %>
<%@ page import="bean.BoardDTO" %>

<%
	//이전 페이지에서 전달한 bno 받기
	int bno = Integer.parseInt(request.getParameter("bno"));
	
	//데이터 접근 객체 가져오기 
	BoardDAO dao = BoardDAO.getInstance();
	
	//게시글 갖고 오라는 메소드 호출
	BoardDTO article = dao.getArticle(bno);
	
	//현재 페이지에서 받은 게시글 저장
	request.setAttribute("article", article);
	
 	RequestDispatcher dp = request.getRequestDispatcher("../view/BoardUpdateView.jsp");
	dp.forward(request, response);
%>

 

 

 

글 수정 페이지

글 수정 페이지에도 validate() 함수를 적용해준다.

BoardWriteForm.jsp 파일을 복사해 BoardUpdateView.jsp 만든다.

스크립트 부분은 게시글 작성 폼의 자바스크립트를 그대로 사용한다.

<script src="jquery/jquery-3.7.0.min.js"></script>
<script type="text/javascript">
$().ready(function(){
	$("#submit11").on("click",function(){
		if(validate()){
			$("form").submit();
		}
	});
});

function validate(){
	let flen = $("form[name=form1] .chk").length;
	for(var 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').eq(i).focus();
				return false;
			}  
	}
	return true;
}
</script>

 

 

HTML부분은 input 태그 안에 value에 article 속성 값을 이용해 불러온 게시글의 데이터를 출력한다.

BoardContent.jsp와는 다르게 readonly를 넣지 않아서 수정할 수 있게 한다.

<body>
<form name="form1" action="jb?command=updateProc" method="post">
<table>
	<tr><td colspan="2"><h3>게시글 수정</h3></td></tr>
	<tr>
		<th>제목</th>
		<td>
			<input type="text" name="subject" title="제목" value="${article.subject}">
		</td>
	</tr>
	<tr>
		<th>작성자</th>
		<td><input type="text" name="writer" class="chk" title="작성자" value="${article.writer}"></td>
	</tr>
	<tr>
		<th>글 내용</th>
		<td><textarea name="content" class="chk"title="글내용">${article.content}</textarea></td>
	</tr>
	<tr>
		<th>비밀번호</th>
		<td><input type="password" name="passwd" class="chk" title="비밀번호" value="${article.passwd}"></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>
<input type="hidden" name="bno" value="${article.bno}">
<input type="hidden" name="bref" value="${article.bref}">
<input type="hidden" name="bstep" value="${article.bstep}">
<input type="hidden" name="blevel" value="${article.blevel}">
</form>
</body>

 

 

 


전체 코드

더보기
<!-- BoardUpdateAction.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="bean.BoardDAO" %>
<%@ page import="bean.BoardDTO" %>

<%
	//이전 페이지에서 전달한 bno 받기
	int bno = Integer.parseInt(request.getParameter("bno"));
	
	//데이터 접근 객체 가져오기 
	BoardDAO dao = BoardDAO.getInstance();
	
	//게시글 갖고 오라는 메소드 호출
	BoardDTO article = dao.getArticle(bno);
	
	//현재 페이지에서 받은 게시글 저장
	request.setAttribute("article", article);
	
	//BoardContentView 페이지로 전달
	//response.sendRedirect("jb?command=contentView");
	
 	RequestDispatcher dp = request.getRequestDispatcher("../view/BoardUpdateView.jsp");
	dp.forward(request, response);
%>
<!-- BoardUpdateView.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" %>
<%@ page import="bean.BoardDAO" %>
<%@ page import="bean.BoardDTO" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 수정</title>
<link rel="stylesheet" src="CSS/form.css" type="text/css">
<script src="jquery/jquery-3.7.0.min.js"></script>
<script type="text/javascript">
$().ready(function(){
	$("#submit11").on("click",function(){
		if(validate()){
			$("form").submit();
		}
	});
});

function validate(){
	let flen = $("form[name=form1] .chk").length;
	for(var 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').eq(i).focus();
				return false;
			}  
	}
	return true;
}
</script>

</head>
<body>
<form name="form1" action="jb?command=updateProc" method="post">
<table>
	<tr><td colspan="2"><h3>게시글 수정</h3></td></tr>
	<tr>
		<th>제목</th>
		<td>
			<input type="text" name="subject" title="제목" value="${article.subject}">
		</td>
	</tr>
	<tr>
		<th>작성자</th>
		<td><input type="text" name="writer" class="chk" title="작성자" value="${article.writer}"></td>
	</tr>
	<tr>
		<th>글 내용</th>
		<td><textarea name="content" class="chk"title="글내용">${article.content}</textarea></td>
	</tr>
	<tr>
		<th>비밀번호</th>
		<td><input type="password" name="passwd" class="chk" title="비밀번호" value="${article.passwd}"></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>
<input type="hidden" name="bno" value="${article.bno}">
<input type="hidden" name="bref" value="${article.bref}">
<input type="hidden" name="bstep" value="${article.bstep}">
<input type="hidden" name="blevel" value="${article.blevel}">
</form>
</body>
</html>