방명록 수정하기

조수경·2022년 1월 24일
0

JSP

목록 보기
44/45

[수정]

  1. 클릭 시 상단의 폼에 정보가 입력되고(비밀번호 제외)
    "메시지 남기기" 버튼이 hidden, "확인" 및 "취소" 버튼이 block
  2. "확인" 클릭 시 해당 정보가 업데이트가 되는데, 이때 비밀번호가 일치해야 함
    3. "취소" 클릭 시 현재 페이지의 목록으로 되돌아감
    "메시지 남기기" 버튼이 block, "확인" 및 "취소" 버튼이 hidden

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 />



          <!-- //함수 수행후 기본키를 던져서 -->
<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>

파라미터가 1일때

파라미터가 1보다 작을때

updateMessage.jsp

<%@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에 있다.

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에 있어!

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에 넣어서 돌려줘~~~
profile
신입 개발자 입니다!!!

0개의 댓글