<%@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="확인" />
<input type="button" value="취소" onclick="javascript:location.href='list.jsp';" />
</form>
<hr />
<!-- //함수 수행후 기본키를 던져서 -->
<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>
<a href="deleteMessage.jsp?messageId=${message.messageId}">[삭제]</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
파라미터가 1일때
파라미터가 1보다 작을때
<%@page import="dto.GuestbookMessage"%>
<%@page import="service.UpdateMessageService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
//받기
String messageId = request.getParameter("messageId");
String guestName = request.getParameter("guestName");
String password = request.getParameter("password");
String message = request.getParameter("message");
//찍기
out.print("messageId :"+messageId+"<br />");
out.print("guestName :"+guestName+"<br />");
out.print("password :"+password+"<br />");
out.print("message :"+message+"<br />");
//public GuestbookMessage(int messageId, String guestName, String password, String message)
//vo
GuestbookMessage guestbookMessage =
new GuestbookMessage(Integer.parseInt(messageId), guestName, password, message);
//여기서 사용할 UpdateMessageService의 객체를 생성
UpdateMessageService service = UpdateMessageService.getInstance();
int result = service.update(guestbookMessage);
if(result>0){ //변경 성공(파람이 1일때)
out.print("<script type='text/javascript'>location.href='list.jsp?result=1'</script>");
}else{// 변경 실패(파람이 0일때)
out.print("<script type='text/javascript'>location.href='list.jsp?result=0'</script>");
}
%>
update함수를 호출!해서 갔다와서 다시 result로 넣어줘야함
update함수는 아래에 있는 UpdateMessageService.jsp에 있다.
package service;
import java.sql.Connection;
import java.sql.SQLException;
import dao.MessageDao;
import dto.GuestbookMessage;
import jdbc.ConnectionProvider;
import jdbc.JdbcUtil;
public class UpdateMessageService {
//싱글톤 패턴
private static UpdateMessageService instance =
new UpdateMessageService();
public static UpdateMessageService getInstance() {
return instance;
}
private UpdateMessageService () {} //기본 생성자
//메시지를 update하는 비즈니스 로직~~
public int update(GuestbookMessage message) {
Connection conn = null;
int result = 0;
try {
//커넥션을 제공해주는 클래스에 함수를 불러서 conn에 넣어줌
conn = ConnectionProvider.getConnection();
//DAO 객체 생성
MessageDao messageDao = MessageDao.getInstance();
result = messageDao.update(conn, message);
}catch(SQLException ex) {
throw new ServiceException("메시지 수정 실패 : " +ex.getMessage()
,ex); //ex에 원인이 담겨있음
}finally {
JdbcUtil.close(conn);
}
return result;
}
}
dao에 있는 update함수를 호출해서 result에 넣어줘!
근데 이 함수는 MessageDao.java에 있어!
//메시지 수정(커넥션, 무엇을)
public int update(Connection conn, GuestbookMessage message) {
PreparedStatement pstmt = null;
try {
pstmt= conn.prepareStatement("update guestbook_message " +
" set guest_name=?,message=? " +
" where message_id = ? and password=?");
pstmt.setString(1, message.getGuestName());
pstmt.setString(2, message.getMessage());
pstmt.setInt(3, message.getMessageId());
pstmt.setString(4, message.getPassword());
return pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}finally {
JdbcUtil.close(pstmt);
}//end try
}
db랑 연동해서 아이디와 비번이 맞으면? 이름과 메시지?방명록?을 수정해라! 그리고 그걸 pstmt에 넣어서 돌려줘~~~