방명록 삭제

조수경·2022년 1월 26일
0

JSP

목록 보기
45/45

list.jsp

<%@page import="dto.GuestbookMessage"%>
<%@page import="java.util.List"%>
<%@page import="service.GetMessageListService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
  //list.jsp에서 메시지 목록(List<GuestbookMessage>)을 가져와주는 서비스 로직
  GetMessageListService messageListService = 
     GetMessageListService.getInstance();
	List<GuestbookMessage> list = messageListService.getMessageList();

%>


<!-- 위에 자바의 세계를 jsp세계로 불러오기  / list는 db에 저장된 값-->
<c:set var="list" value="<%=list%>" />


<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/js/jquery-3.6.0.js"></script>
<title>방명록 메시지 목록</title>

<script type="text/javascript">
$(function(){
 	alert("왔다");//새로고침될때 무조건 실행됨
});

//fn_updt(기본키, 작성자, 메시지)
function fn_updt(vara, varb, varc){ //기본키를 받고
	//alert(vara);
	//기본키 데이터를 vara 매개변수로 받아서 frmUpdate 폼의 기본키 데이터로 사용
	$("#messageId").val(vara);
	//작성자 매개변수를 frmUpdate 폼의 이름 데이터로 사용
	$("#guestName").val(varb);
	//메시지 매개변수를 frmUpdate 폼의 내용 데이터로 사용
	$("#message").val(varc);
	$("#frmWrite").css("display","none");//안보이게!
	$("#frmUpdate").css("display","block");//보이게!
	
}


</script>

</head>
<body>
<form id="frmWrite" method="post" action="writeMessage.jsp" style="display:block;">
	이름: <input type="text" name="guestName" /><br />
	비밀번호:<input type="password" name="password" /><br />
	내용:<textarea rows="3" cols="30" name="message"></textarea><br />
	<input type="submit" value="메시지 남기기" />
</form>
<form id="frmUpdate" method="post" action="updateMessage.jsp" style="display:none;">
	<input type="hidden" name="messageId" id="messageId"/>
	이름: <input type="text" name="guestName" id="guestName"/><br />
	비밀번호:<input type="password" name="password" /><br />
	내용:<textarea rows="3" cols="30" name="message" id="message"></textarea><br />
	<input type="submit" value="확인" />&nbsp;
	<input type="button" value="취소" onclick="javascript:location.href='list.jsp';" />
</form>
<hr />
<!-- 
[수정]
1. 클릭 시 상단의 폼에 정보가 입력되고(비밀번호 제외)
   "메시지 남기기" 버튼이 hidden, "확인" 및 "취소" 버튼이 block
2. "확인" 클릭 시 해당 정보가 업데이트가 되는데, 이때 비밀번호가 일치해야 함
3. "취소" 클릭 시 현재 페이지의 목록으로 되돌아감
   "메시지 남기기" 버튼이 block, "확인" 및 "취소" 버튼이 hidden

 -->
		  <!-- //함수 수행후 기본키를 던져서 -->
<c:if test="${param.result eq 1}">
	<div style="color:red;">변경 성공했습니다.</div>
</c:if>
<c:if test="${param.result < 1}">
	<div style="color:red;">비밀번호를 확인해주세요.</div>
</c:if>
<table border="1">
<c:forEach var="message" items="${list}">
	<tr>
		<td>
		   메시지 번호 : <span>${message.messageId}</span><br />
		   손 님 이 름 : <span>${message.guestName}</span><br />
		   메   시   지 : <span>${message.message}</span><br />
		  <a href="#" id="updt" onclick="fn_updt('${message.messageId}','${message.guestName}','${message.message}')">[수정]</a>&nbsp;
		  <a href="deleteMessage.jsp?messageId=${message.messageId}">[삭제]</a>
		  
		</td>
	</tr>
</c:forEach>
</table>

</body>
</html>

deleteMessage.jsp

<%@page import="service.ServiceException"%>
<%@page import="dto.GuestbookMessage"%>
<%@page import="service.DeleteMessageService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	//messageId=103
	String messageId = request.getParameter("messageId"); //파람을 꺼내와야됨
	//vo객체 생성
	GuestbookMessage message = new GuestbookMessage();
	//setMessageId는 int형인데 위에 string으로 되어있음 -> 형변환 해주기 
	message.setMessageId(Integer.parseInt(messageId));
	//삭제 성공 여부(성공으로 세팅)
	boolean result = true;
	//삭제된 건수
	int cnt = 0;
	try{
	    DeleteMessageService service = DeleteMessageService.getInstance(); //객체 생성
	    cnt = service.delete(message);
	}catch(ServiceException ex){//받아!!
		//실패 처리
		result = false;
	}
%>
<!DOCTYPE html>
<html>
<head>

<title>Insert title here</title>
</head>
<title>방명록 메시지 삭제</title>
<body>
<%

if(result){//result : true일때 삭제가 잘 된 경우
	if(cnt>0){//삭제가 잘 된경우
		out.print("메시지를 삭제하였습니다.");
	}else{//기본키에 해당되는 데이터가 없을 경우
		out.print("해당 데이터가 없습니다.");
	}
}else{//result : false
	out.print("삭제가 되지 않았습니다.");
}

%>
	<br />
	<a href="list.jsp">[목록 보기]</a>
</body>
</html>

DeleteMessageService.java

package service;

import java.sql.Connection;
import java.sql.SQLException;

import dao.MessageDao;
import dto.GuestbookMessage;
import jdbc.ConnectionProvider;
import jdbc.JdbcUtil;

public class DeleteMessageService {
	//ps. 참고로 슬기언니는 바보야
	private static DeleteMessageService instance = 
			new DeleteMessageService();
	public static DeleteMessageService getInstance() {
		return instance;
	}
	private DeleteMessageService() {}
	
	//jsp에서 message를 받아와서 사용해야함
	public int delete(GuestbookMessage message) {
		//conn객체가 필요함
		Connection conn = null;
		
		try {
		conn = ConnectionProvider.getConnection();
		
		MessageDao messageDao = MessageDao.getInstance();
		
		int result = messageDao.delete(conn, message);
		return result;
		//result가 0이면 삭제 실패 1이면 삭제 성공
		}catch(SQLException ex) {
			//삭제 시 문제가 발생되면 롤백 처리
			//DC(control)L : commit, rollback(마지막 커밋 시점으로 돌아가는 것)
			//-> 기존 트랜잭션이 종료가되는 동시에 새로운 트랜잭션이 시작되는것
			//-> 트랜잭션이란? DB를 변경하기 위해 수행되어야할 논리적 단위(여러개의 sql로 구성)
			JdbcUtil.rollback(conn);
			throw new ServiceException("삭제 실패", ex); //(메시지, 이유): 던져 !!
		}finally {
			JdbcUtil.close(conn);
		}
	}
}

MessageDao.java

	//삭제 : conn과 message를 파람으로( 연결 / 삭제 대상)
	// ? = message.getMessageId()
	public int delete(Connection conn, GuestbookMessage message){
		//pstmt 준비해주고
		PreparedStatement pstmt = null;
		try {
			// con이랑 pstmt연결해주공
			pstmt = conn.prepareStatement(
					"DELETE FROM GUESTBOOK_MESSAGE" + 
					"		WHERE MESSAGE_ID = ?"
					);
			//?세팅하기 : MESSAGE_ID자료형이 number형이라 int로 하기
			pstmt.setInt(1, message.getMessageId());//가져와서 ?에 세팅
			return pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
			return 0;
		}finally {
			JdbcUtil.close(pstmt);
		}
		
	
	}
profile
신입 개발자 입니다!!!

0개의 댓글