본문 바로가기

데이터 분석/Spring

Martin's Bookshelf_Part 7 : BOOK CRUD(Update)

 

가장 작업량이 많고 까다로운 Update 과정이다. 한 번 심호흡을 크게 하고 시작해본다.

  1. JSP 파일에서 Update 버튼에 대한 JS function을 추가한다. 수정 Form에 DB에 있는 row를 불러와야하기 때문에 b_idx를 Controller로 보내준다.

  2. Controller에서 전송 받은 파라미터를 활용 → 해당 b_idx의 row를 vo에 할당 → Model에 속성을 추가한 다음 수정 Form인 book_modify_form을 호출한다.

  3. book_modify_form.jsp에서 전달 받은 Model에서 정보를 추출하여 수정 form에 채워 넣는다.
    1. 수정 form은 입력 form과 대동소이 하기 때문에 book_insert_form.jsp를 복사해서 사용한다.
    2. 각 항목 HTML 태그의 value에 model안에 담겨진 vo를 활용하여 DB에서 불러온 값을 입력해 놓는다.
    3. 수정된 form에 채워진 정보를 전송하는 JS function을 만들고 update.do를 호출한다

  4. Controller에서 update.do 리퀘스트를 코딩한다.
    1. vo로 수정 된 정보를 한꺼번에 받아 DAO의 메소드에게 넘겨준다
  5. DAO에서 update method를 생성 → Mapper에서 SQL문 작성
    1. parameter가 vo로 들어오기 때문에 이에 맞는 parameterType을 설정

* 표지 사진을 수정하는 방법은 추후에 진행할 예정

 


<Step 1: book_list.jsp>

더보기
	function modify(b_idx) {
		
		if (confirm("수정을 진행하시겠습니까?")==false) return;
		
		location.href ="modify_form.do?b_idx="+b_idx;
	}

 

<Step 2: Controller _ modify_form.do>

더보기
	@RequestMapping("/book/modify_form.do")
	public String modify_form(int b_idx, Model model) {
		
		BookVo vo = book_dao.selectOne(b_idx);
		
		model.addAttribute("vo", vo);
		
		return "book/book_modify_form";
	}

 

<Step 3: book_modify_form.jsp>

더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Add New Book</title>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<style type="text/css">

#box{
	width: 800px;
	margin: auto;
	margin-top: 100px;
}

textarea {
	width: 98%;
	height: 100px;
}

input[type='button']{
	width: 100px;
	margin-top: 10px;
}

</style>

<script type="text/javascript">

	function send(f){		
			
		f.action = "modify.do";
		f.submit();
		
	}


</script>


</head>
<body>

<form method="POST" enctype="multipart/form-data">
<input type="hidden" name="b_idx" value="${ vo.b_idx }">
	<div id="box">
		<div class="panel panel-primary">
		    <div class="panel-heading">Modify Form</div>
		    <div class="panel-body">
		    	<table class="table">
		    		<tr>
		    			<th>분류</th>
		    			<td><input type="text" name="b_category" value="${ vo.b_category }" required="required"></td>
		    			
		    			<th>완독일</th>
		    			<td><input type="text" name="b_readdate" value="${ fn:substring(vo.b_readdate,0,10) }"></td>		    			
		    		</tr>
		    	
		    		<tr>
		    			<th>제목</th>
		    			<td><input type="text" name="b_title" value="${ vo.b_title }" required="required"></td>
		    			
		    			<th>부제</th>
		    			<td><input type="text" name="b_subtitle" value="${ vo.b_subtitle }"></td>
		    		</tr>	    		
		    		
		    		<tr>
		    			<th>작가</th>
		    			<td><input type="text" name="b_author" value="${ vo.b_author }" required="required"></td>
		    			
		    			<th>쪽수</th>
		    			<td><input type="text" name="b_pages" value="${ vo.b_pages }"></td>
		    		</tr>
		    				    		
		    		<tr>
		    			<th>출판사</th>
		    			<td><input type="text" name="b_publisher" value="${ vo.b_publisher }" required="required"></td>
		    			
		    			<th>출판일</th>
		    			<td><input type="text" name="b_published" value="${ fn:substring(vo.b_published,0,10) }"></td>
		    		</tr>
		    			    				    		
		    		<tr>
		    			<th>책 설명</th>
		    			<td colspan="3"><textarea name="b_desc">${ vo.b_desc }</textarea></td>
		    		</tr>
		    		
		    		<tr>
		    			<td colspan="2" align="center">
		    				<input class="btn btn-primary" type="button" value="Upload" onclick="send(this.form);">
		    				<input class="btn btn-danger" type="button" value="Cancle" onclick="location.href='list.do'">
		    			</td>
		    		</tr>
		    	
		    	</table>
		    </div>
	    </div>	
	</div>
</form>


</body>
</html>

 

<Step 4&5: Controller_modify.do / DAO_update method / Mapper>

 

이것으로 기본적인 CRUD 기능은 구현해냈다!