본문 바로가기

개발일지/JSP

[JSP] 게시판_수정/삭제 ★마지막★

 

[JSP] 게시판_페이징_검색_게시물 띄우기

저번 글에 이어서 . . . [JSP] 게시판 구성(게시판 조회 LOWNUM) [JSP] 게시판 구성하기 (feat.시퀀스쿼리)   log4j 자동으로 log 파일이 만들어진다. **로그 관련 파일 ** web.xml (복붙) log4j가 어디..

practice365.xyz

 

저번 시간엔 게시물 띄우는 것까지 했고, 수정과 삭제 버튼을 눌렀을 때 수정창이 뜨고, 삭제가 되는 것까지는 안 돼 있습니다. 수정/삭제까지 마쳐야 게시판의 기본적인 기능들은 사용해 봤다고 할 수 있을 법한데... 아직 댓글을 다는 것과 파일 첨부 등은 해보지 못 했네요. 이런 부분들은 스프링에 들어가서 하게 된다고 하니 기대가 됩니다!!


 * 추가된 기능(2021.12.03) 

- 삭제 기능

- 수정페이지와 수정기능

 


< / board / view.jsp >

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.icia.common.util.StringUtil" %>
<%@ page import="com.icia.web.util.CookieUtil" %>
<%@ page import="com.icia.web.util.HttpUtil" %>
<%@ page import="com.icia.web.dao.BoardDao" %>
<%@ page import="com.icia.web.model.Board" %>
<%@ page import="org.apache.logging.log4j.LogManager" %>
<%@ page import="org.apache.logging.log4j.Logger" %>
<% 

   Logger logger = LogManager.getLogger("/board/view.jsp");   
   HttpUtil.requestLogString(request, logger);
   
   //글보기에 왔다가 다시 넘어갈 때
   long bbsSeq = HttpUtil.get(request, "bbsSeq", (long)0);
   String searchType = HttpUtil.get(request, "searchType");
   String searchValue = HttpUtil.get(request, "searchValue");
   long curPage = HttpUtil.get(request, "curPage", (long)1);
   
   String cookieUserId = CookieUtil.getValue(request, "USER_ID");
   
   BoardDao boardDao = new BoardDao();   
   Board board = boardDao.boardSelect(bbsSeq);
   
   if(board != null)
   {
      //조회수 증가
      boardDao.boardReadCntPlus(bbsSeq);
   }
      
%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/include/head.jsp" %>
<script>
$(function(){
<%
   if(board == null)
   {
%>   
   alert("조회하신 게시물이 존재하지 않습니다.");
   document.bbsForm.action = "/board/list.jsp";
   document.bbsForm.submit();
<%
   }
   else
   {
%>
   //리스트 페이지 되돌아갈 때,
   //원래상태 그대로의 페이지로 돌아가야 하기 때문에 bbsForm으로 거쳐감.
   $("#btnList").on("click", function(){
      document.bbsForm.action = "/board/list.jsp";
      document.bbsForm.submit();
   });

   <%
      if(StringUtil.equals(cookieUserId, board.getUserId()))
      {   
   %>
         $("#btnUpdate").on("click", function(){
            document.bbsForm.action = "/board/update.jsp";
            document.bbsForm.submit();
         });
         
         $("#btnDelete").on("click", function(){
            if(confirm("게시물을 삭제 하시겠습니까?") == true)
            {   
               document.bbsForm.action = "/board/delete.jsp";
               document.bbsForm.submit();
            }
         });
<%
      }
%>
<%
   }
%>
      
});

</script>
</head>
<body>

<% 
   if(board != null)
   {   
%>
<%@ include file="/include/navigation.jsp" %>
<div class="container">
   <h2>게시물 보기</h2>
   <div class="row" style="margin-right:0; margin-left:0;">
      <table class="table">
         <thead>
            <tr class="table-active">
               <th scope="col" style="width:60%">
                  <%=HttpUtil.filter(board.getBbsTitle())%><br/>
                  <%=HttpUtil.filter(board.getBbsName())%>&nbsp;&nbsp;&nbsp;
                  <a href="mailto:<%=board.getBbsEmail()%>" style="color:#828282;"><%=board.getBbsEmail()%></a>
                  
               </th>
               <th scope="col" style="width:40%" class="text-right">
                  조회 : <%=StringUtil.toNumberFormat(board.getBbsReadCnt())%><br/>
                  <%=board.getRegDate()%>
               </th>
            </tr>
         </thead>
         <tbody>
            <tr>
               <td colspan="2"><pre><%=StringUtil.replace(HttpUtil.filter(board.getBbsContent()),"\n", "<br />")%></pre></td>
            </tr>
         </tbody>
         <tfoot>
         <tr>
               <td colspan="2"></td>
           </tr>
         </tfoot>
      </table>
   </div>
   
   <button type="button" id="btnList" class="btn btn-secondary">리스트</button>
<% 
   if(StringUtil.equals(cookieUserId, board.getUserId()))
   {   
%>   
   <button type="button" id="btnUpdate" class="btn btn-secondary">수정</button>
   <button type="button" id="btnDelete" class="btn btn-secondary">삭제</button>
<% 
   }   
%>
   <br/>
   <br/>
</div>

<% 
   }
%>

<form name="bbsForm" id="bbsForm" method="post">
   <input type="hidden" name="bbsSeq" value="<%=bbsSeq%>" />
   <input type="hidden" name="searchType" value="<%=searchType%>" />
   <input type="hidden" name="searchValue" value="<%=searchValue%>" />
   <input type="hidden" name="curPage" value="<%=curPage%>" />
</form>

</body>
</html>

 

 

 

- 지난 시간 없는 게시물을 검색창에 치고 들어 갔을 때(게시물이 없으면 게시판에 없으니 누르고 들어갈 수는 없다) 이런 alert창을 띄우는 것까지 했다. 이 밖에도 다양한 예외 처리를 해줘야하기 때문에 이어서 추가로 작성해본다. 

 

 

 

47 else 게시물이 있을 때 

52 리스트 버튼을 눌렀을 때 

 - 그냥 돌아가는 게 아니라 돌아 갔을 때 전에 보던 페이지 그대로 들고가기 위해서 bbsForm을 들고 간다.

 - 게시글 작성자가 아니더라도 리스트 버튼은 보여줘야함

58 쿠키 아이디(로그인한 아이디)와 보드아이디(글쓴이)가 동일하다면 수정/삭제 버튼을 띄운다.

 





아래의 html 부분에서 이미 버튼을 숨겨 뒀기 때문에 58번에서 if처리를 하지 않아도 오류는 없지만 버튼이 없는데 기능을 만들 이유가 없으니 똑같이 기능도 숨겨 둔다.

 

61 수정 버튼을 누르면 update.jsp 페이지로 이동(추가 예정)

- 수정 페이지가 뜬다.

66 삭제 버튼을 누르면 confirm창이 뜨고 확인(true)를 누르면 delete.jsp에서 지정된 코드가 실행

- 여기선 따로 화면을 생성하지 않았기 때문에 어떠한 창이 뜨는 게 아니라 삭제 기능만 실행됨

 

 

** 여기까지 버튼에 어떤 기능만 들어갈 건지 설정만 해둔 상태로 실질적인 기능은 입혀지지 않았다.

 


 ** view.jsp에서 중요 

document.bbsForm.action = "/board/list.jsp";    <= or [ update.jsp / delete ] 

document.bbsForm.submit();

 

어떤 이유에서든지 리스트로 돌아갈 때 원래 내가 가지고 있던 정보를 가지고 돌아가기 위해서 update.jsp를 작성할 때에도 delete.jsp를 작성할 때에도 html문 가장 하단에 폼을 히든으로 숨겨둬야한다. 때문에 searchType과 searchValue를 사용하지 않더라도 들고 다니는 이유기도 하다.


< web.dao / boardDao.java >

- 게시물 삭제 메소드 boardDelete() 만들긔♡

 

   //게시물 삭제
   public int boardDelete(long bbsSeq)
   {
      int count = 0;
      Connection conn = null;
      PreparedStatement pstmt = null;
      StringBuilder sql = new StringBuilder();
      
      sql.append("DELETE FROM TBL_BOARD ");
      sql.append(" WHERE BBS_SEQ = ? ");

      try
      {
         conn = DBManager.getConnection();
         pstmt = conn.prepareStatement(sql.toString());
         
         pstmt.setLong(1, bbsSeq);

         count = pstmt.executeUpdate();
         
      }
      catch(SQLException e)
      {
         logger.error("[BoardDao] boardDelete SQLException", e);
      }
      finally
      {
         DBManager.close(pstmt, conn);
      }
      
      return count;
   }

 

- 지금까지 메소드는 많이 만들었지만 삭제는 처음이니까 간단하게 설명을 하자면 DB에 있는 정보를 삭제하기 위한 쿼리를 작성하는 거니까 ResultSet은 필요 없음~

- pstmt.setLong(1, bbsSeq) 이것도 전에 만든 메소드 처럼 bbsSeq 글 한 개만 삭제만 하는 거니까 idx를 사용하지 않고, 1만 사용하면 된다.

 


 

< board / delete.jsp >

- 따로 보여주는 페이지를 만들진 않음

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.icia.common.util.StringUtil" %>
<%@ page import="com.icia.web.util.HttpUtil" %>
<%@ page import="com.icia.web.util.CookieUtil" %>
<%@ page import="com.icia.web.dao.BoardDao" %>
<%@ page import="com.icia.web.model.Board" %>
<%@ page import="com.icia.web.model.User" %>
<%@ page import="org.apache.logging.log4j.LogManager" %>
<%@ page import="org.apache.logging.log4j.Logger" %>
<%
//로그
Logger logger = LogManager.getLogger("/board/delete.jsp");
HttpUtil.requestLogString(request, logger);

//쿠키아이디 조회 //게시글 쓴 사람과 같아야 하니까
String cookieUserId = CookieUtil.getValue(request, "USER_ID");

//성공실패
boolean bSuccess = false;
String errorMsg = "";

long bbsSeq = HttpUtil.get(request, "bbsSeq", (long)0);

if(bbsSeq > 0)
{	//모든 경우의 수를 생각해야한다.
	BoardDao boardDao = new BoardDao();
	Board board = boardDao.boardSelect(bbsSeq);
	
	if(board != null)
	{	
		if(StringUtil.equals(cookieUserId, board.getUserId()))
		{
			if(boardDao.boardDelete(bbsSeq) > 0)
			{
				bSuccess = true;
			}
			else
			{
				errorMsg = "게시물 삭제중 오류가 발생했습니다.";
			}
		}
		else
		{	//내 게시물이 아님
			errorMsg = "사용자가 작성한 게시물이 아닙니다.";
		}
	}
	else
	{
		errorMsg = "게시물 정보가 올바르지 않습니다.";
	}
}
else
{
	errorMsg = "게시물 키 값이 올바르지 않습니다.";
}
%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/include/head.jsp" %>
<script>
$(function(){
<%
	if(bSuccess == true)
	{
%>
	alert("삭제되었습니다.");
<%
	}
	else
	{
%>
	alert("<%=errorMsg%>");
<%
	}
%>
	location.href = "/board/list.jsp";
});

</script>
</head>
<body>

</body>
</html>

 

 

초기화 세팅 작업

16 수정/삭제할 때 접속자와 글쓴이가 같아야 권한이 생기니까 필요 

19/20 성공/실패 유무를 가르고 메세지를 띄우는 기능 초기화 

22 게시글 번호의 초기값은 0으로 해둠 

 

여기서는 새로운 페이지로 넘어간 게 아니기 때문에 폼의 정보를 세팅할 필요가 없다!

대부분 기존에 했던 작업들이라 익숙해지기만 하면 됨

 

 

 

24 게시물이 있다면

- null이 아닌 이유는 long 타입으로 지정했고, 값이 없는 게 0이니까 여기서는 0보다 크다는 전제를 깔아야 게시물이 있다는 뜻이다.

52 (else) 게시물이 없다는 뜻 

 

26-27 boardDao/board 객체 선언

- 보통은 게시판에서 게시물을 클릭해 들어와서 삭제를 할 거라고 생각을 하지만 그렇지 않고 주소를 통해서 들어오는 경우도 있다. 개발자들은 이러한 예외처리들을 하나하나 계산해나가야한다. 때문에 게시물 번호가 있는지 확인을 할 필요가 있다. 

26 메소드가 들어 있는 객체 선언

27 board에는 BoardDao에서 갖고 온 boardSelect를 이용해 한 건의 글을 불러온다.

- PK인 bbsSeq로 갖고 와야만 함

 

29 갖고 온 글이 비어 있지 않다면!

- 여기서는 board가 정보들을 담고 있는 객체니까 null을 사용해야 하는 것이다.

 

31 접속자와 게시자가 같다면 

42 (else) 내 게시물이 아니라면 '사용자가 작성한 게시물이 아닙니다.'

 

33 객체가 0이 아니라면(들어있다면) 해당하는 글을 지운다.

35 성공으로 바꿔줌

39 else 실패라면 오류를 띄어줌

 

 

- 위쪽에서 jsp의 결과(bSuccess)가 나오면 아래에서 사용자에게 답을 알려준다.

 

64 삭제했습니다!

70 실패이유 입니다!

77 삭제하고 바로 게시판으로 이동 (bbsForm을 가지고 가야 됨)

 

 


< board / upadate.jsp >

- 뼈대(html)만 넣어 놓고 메소드부터 만든다.

 

< / board / BoardDao.jsp >

- boardUpdate() 게시글 수정 메소드 만들긔♡

   //게시글 수정
   public int boardUpdate(Board board)
   {
	   int count = 0;
	   Connection conn = null;
	   PreparedStatement pstmt = null;
	   StringBuilder sql = new StringBuilder();
	   
	   sql.append("UPDATE TBL_BOARD ");
	   sql.append("	  SET BBS_TITLE = ?, ");
	   sql.append("	       BBS_CONTENT = ? ");
	   sql.append("	WHERE BBS_SEQ = ? ");
	   
	   try
	   {
		   int idx = 0;
		   conn = DBManager.getConnection();
		   
		   pstmt = conn.prepareStatement(sql.toString());
		   
		   pstmt.setString(++idx, board.getBbsTitle());
		   pstmt.setString(++idx, board.getBbsContent());
		   pstmt.setLong(++idx, board.getBbsSeq());
		   
		   count = pstmt.executeUpdate();
	   }
	   catch(SQLException e)
	   {
		   logger.error("[BoardDao2] boardUpdate SQLException", e);
	   }
	   finally
	   {
		   DBManager.close(pstmt, conn);
	   }
	   return count;
   }

 

- 이번엔 넣어 줄 정보가 많으니까 idx를 사용해서 넣어줌

- 그거 말고는 기존의 메소드의 원리와 같기 때문에 큰 설명은 안 함

 


< board / upadate.jsp >

- 이번엔 수정 페이지와 기능을 넣어 볼 거다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.icia.common.util.StringUtil" %>
<%@ page import="com.icia.web.util.CookieUtil" %>
<%@ page import="com.icia.web.util.HttpUtil" %>
<%@ page import="com.icia.web.dao.BoardDao" %>
<%@ page import="com.icia.web.dao.UserDao" %>
<%@ page import="com.icia.web.model.Board" %>
<%@ page import="com.icia.web.model.User" %>
<%@ page import="org.apache.logging.log4j.LogManager" %>
<%@ page import="org.apache.logging.log4j.Logger" %>
<% 
   //콘솔창에 로그 작성하기
   Logger logger = LogManager.getLogger("/board/update.jsp");   
   HttpUtil.requestLogString(request, logger);
   
   //로그인을 확인하기 위한
   String cookieUserId = CookieUtil.getValue(request, "USER_ID");
   //리스트로 다시 돌아가기 위한
   Long bbsSeq = HttpUtil.get(request, "bbsSeq", (long)0);
   String searchType = HttpUtil.get(request, "searchType", "");
   String searchValue = HttpUtil.get(request, "searchValue", "");
   long curPage = HttpUtil.get(request, "curPage", (long)1); 
   //얜 0으로 하면 안 됨. 왜냐면 페이지는 1부터 시작이니까~
   
   BoardDao boardDao = new BoardDao();
   Board board = boardDao.boardSelect(bbsSeq);
   
   if(board != null)
   {
      //본인 게시물이 아니면 수정 못함
      //해당 게시판를 작성한 사용자의 정보 가져오기.
      if(!StringUtil.equals(cookieUserId, board.getUserId()))
      {
         board = null;
      }   
   }
%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/include/head.jsp" %>
<script>
$(function(){
<%
	if(board == null)
	{
%>
	alert("게시물이 존재하지 않습니다.");
	location.href = "/board/list.jsp";
<%
	}
	else
	{
%>
	$("#btnList").on("click", function(){
		document.bbsForm.action = "/board/list.jsp";
		document.bbsForm.submit();
	});
	
	$("#btnUpdate").on("click", function(){
		if($.trim($("#bbsTitle").val()).length <= 0)
		{
			alert("제목을 입력하세요.");
			$("#bbsTitle").val("");
			$("#bbsTitle").focus();
			return;
		}
		
		if($.trim($("#bbsContent").val()).lenth <= 0)
		{
			alert("내용을 입력하세요.");
			$("#bbsContent").val("");
			$("#bbsContent").focus();
			return;
		}
		
		document.updateForm.submit();
	});
<%
	}
%>

});
</script>
</head>
<body>
<% 
	if(board != null)
	{
%>
<%@ include file="/include/navigation.jsp" %>
<div class="container">
   <h2>게시물 수정</h2>
   <form name="updateForm" id="updateForm" action="/board/updateProc.jsp" method="post" >
   <!--<form name="updateForm" id="updateForm" action="/board/updateFileProc.jsp" method="post" enctype="multipart/form-data">-->
      <input type="text" name="bbsName" id="bbsName" maxlength="20" style="ime-mode:active;" value="<%=board.getBbsName()%>" class="form-control mt-4 mb-2" placeholder="이름을 입력해주세요." readonly />
      <input type="text" name="bbsEmail" id="bbsEmail" maxlength="30" style="ime-mode:inactive;" value="<%=board.getBbsEmail()%>" class="form-control mb-2" placeholder="이메일을 입력해주세요." readonly />
      <input type="text" name="bbsTitle" id="bbsTitle" maxlength="100" style="ime-mode:active;" value="<%=board.getBbsTitle()%>" class="form-control mb-2" placeholder="제목을 입력해주세요." required />
      <div class="form-group">
         <textarea class="form-control" rows="10" name="bbsContent" id="bbsContent" style="ime-mode:active;" placeholder="내용을 입력해주세요" required><%=board.getBbsContent()%></textarea>
      </div>
      <!--수정버튼 눌렀을 때 타고 갈 폼-->
      <input type="hidden" name="bbsSeq" value="<%=bbsSeq%>" />
      <input type="hidden" name="searchType" value="<%=searchType%>" />
      <input type="hidden" name="searchValue" value="<%=searchValue%>" />
      <input type="hidden" name="curPage" value="<%=curPage%>" />
   </form>
   
   <div class="form-group row">
      <div class="col-sm-12">
         <button type="button" id="btnUpdate" class="btn btn-primary" title="수정">수정</button>
         <button type="button" id="btnList" class="btn btn-secondary" title="리스트">리스트</button>
      </div>
   </div>
</div>
<!--리스트버튼 눌렀을 때 타고 갈 폼-->
<form name="bbsForm" id ="bbsForm" method="post">
      <input type="hidden" name="bbsSeq" value="<%=bbsSeq%>" />
      <input type="hidden" name="searchType" value="<%=searchType%>" />
      <input type="hidden" name="searchValue" value="<%=searchValue%>" />
      <input type="hidden" name="curPage" value="<%=curPage%>" />   
</form>
<% 
	}
%>
</body>
</html>

 

 

<세팅 작업>

 

- 세팅 작업에 필요한 이 값들은 view.jsp에서 넘어 온 값을 이용해서 세팅한 것이다. 

  어딜 통해서 값이 들어오고 나가는지가 정말 중요함!!

 

26-27 boardSelect() 메소드를 이용해서 하나의 게시물을 갖고 옴(자세한 설명은 위 delete 에도 있음)

29 보드 안에 객체가 들어 있다면(board의 타입은 객체니까 0이 아니라 null)

33-35 접속자와 게시자가 같지 않다면 board의 값을 null로 만듦 수정을 못 하도록 값을 날려버리는 것

 

 

수정할 게시물이 없을 때

- else는 아래에서 보여줌

 

 

수정할 게시물이 있을 때 ( 접속자와 게시자가 같을 때 )

- 너무 길어서 캡쳐를 못 함

<body>
<% 
	if(board != null)
	{
%>
<%@ include file="/include/navigation.jsp" %>
<div class="container">
   <h2>게시물 수정</h2>
   <form name="updateForm" id="updateForm" action="/board/updateProc.jsp" method="post" >
   <!--<form name="updateForm" id="updateForm" action="/board/updateFileProc.jsp" method="post" enctype="multipart/form-data">-->
      <input type="text" name="bbsName" id="bbsName" maxlength="20" style="ime-mode:active;" value="<%=board.getBbsName()%>" class="form-control mt-4 mb-2" placeholder="이름을 입력해주세요." readonly />
      <input type="text" name="bbsEmail" id="bbsEmail" maxlength="30" style="ime-mode:inactive;" value="<%=board.getBbsEmail()%>" class="form-control mb-2" placeholder="이메일을 입력해주세요." readonly />
      <input type="text" name="bbsTitle" id="bbsTitle" maxlength="100" style="ime-mode:active;" value="<%=board.getBbsTitle()%>" class="form-control mb-2" placeholder="제목을 입력해주세요." required />
      <div class="form-group">
         <textarea class="form-control" rows="10" name="bbsContent" id="bbsContent" style="ime-mode:active;" placeholder="내용을 입력해주세요" required><%=board.getBbsContent()%></textarea>
      </div>
      <!--수정버튼 눌렀을 때 타고 갈 폼-->
      <input type="hidden" name="bbsSeq" value="<%=bbsSeq%>" />
      <input type="hidden" name="searchType" value="<%=searchType%>" />
      <input type="hidden" name="searchValue" value="<%=searchValue%>" />
      <input type="hidden" name="curPage" value="<%=curPage%>" />
   </form>
   
   <div class="form-group row">
      <div class="col-sm-12">
         <button type="button" id="btnUpdate" class="btn btn-primary" title="수정">수정</button>
         <button type="button" id="btnList" class="btn btn-secondary" title="리스트">리스트</button>
      </div>
   </div>
</div>
<!--리스트버튼 눌렀을 때 타고 갈 폼-->
<form name="bbsForm" id ="bbsForm" method="post">
      <input type="hidden" name="bbsSeq" value="<%=bbsSeq%>" />
      <input type="hidden" name="searchType" value="<%=searchType%>" />
      <input type="hidden" name="searchValue" value="<%=searchValue%>" />
      <input type="hidden" name="curPage" value="<%=curPage%>" />   
</form>
<% 
	}
%>
</body>

 

- null이 아닐 때에만 수정페이지를 보여준다.

- 하드 코딩 돼 있던 부분들에 변수명을 <%= 이런식으로 %> 넣어준다. 

- 가장 하단에는 리스트 버튼을 눌렀을 때 타고 갈 폼(hidden)도 넣어준다.

 

 

 

(참고 : 중간에 수정해서 번호가 다름)

이렇게 게시물이 있을 때(else)는 버튼의 기능도 열어주어야 한다. 

 

52 btnList 버튼을 누르면 폼에 있는 정보들을 데리고 게시판으로 돌아간다.

57-75 수정 버튼을 눌렀을 때 

58 제목의 길이가 0이라면 alert창을 띄우고 포커스를 맞춘다.

- $().val(""); 으로 null처리를 해주는 이유는 trim을 했지만 공백이 있을 수 있으니까~

66 내용의 길이가 0이라면 alert창을 띄우고 포커스를 맞춘다.

74 업데이트폼(수정 페이지)도 서브밋 해준다.

 

 

게시물 수정폼(Form)은 어디로 가느냐

바로 action="updateProc.jsp"이다.

 

 

 

< / board / updateProc.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.icia.common.util.StringUtil" %>
<%@ page import="com.icia.web.util.CookieUtil" %>
<%@ page import="com.icia.web.util.HttpUtil" %>
<%@ page import="com.icia.web.dao.BoardDao" %>
<%@ page import="com.icia.web.model.Board" %>
<%@ page import="org.apache.logging.log4j.LogManager" %>
<%@ page import="org.apache.logging.log4j.Logger" %>
<%
//콘솔창에 로그 작성하기
Logger logger = LogManager.getLogger("/board/updateProc.jsp");   
HttpUtil.requestLogString(request, logger);

String cookieUserId = CookieUtil.getValue(request, "USER_ID");

boolean bSuccess = false;
String errorMsg = "";

long bbsSeq = HttpUtil.get(request, "bbsSeq", (long)0);
String searchType = HttpUtil.get(request, "searchType", "");
String searchValue = HttpUtil.get(request, "searchValue", "");
long curPage = HttpUtil.get(request, "curPage", (long)1);

String bbsTitle = HttpUtil.get(request, "bbsTitle", ""); //수정한 값 
String bbsContent = HttpUtil.get(request, "bbsContent", ""); //나중 문제 //수정한 값 

//매개변수 맞게 넘어 왔는지 //Seq 타이틀 컨텐츠
if(bbsSeq > 0 && !StringUtil.isEmpty(bbsTitle) && !StringUtil.isEmpty(bbsContent))
{
	//파라미터는 없는데 들어오는 경우도 있으니 예외처리를 모두 해줘야 한다.
	BoardDao boardDao = new BoardDao();
	Board board = boardDao.boardSelect(bbsSeq); 
	//DB에 들어가있는 값을 그대로 불러온 것(원본) 
	
	//로그인정보와 게시물에 대한 userId 동일한지
	if(board != null && StringUtil.equals(cookieUserId, board.getUserId()))
	{
		board.setBbsTitle(bbsTitle);
		board.setBbsContent(bbsContent);
		
		if(boardDao.boardUpdate(board) > 0)
		{
			bSuccess = true;
		}
		else
		{
			errorMsg = "게시물 수정 중 오류가 발생했습니다.";
		}
	}
	else
	{
		errorMsg = "게시물이 존재하지 않습니다.";
	}
}
else
{
	errorMsg = "게시물 수정 값이 올바르지 않습니다.";
}
%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/include/head.jsp" %>
<script>
$(document).ready(function(){
<%
	if(bSuccess == true)
	{
%>
	alert("게시물이 수정 되었습니다.");
	document.bbsForm.action = "/board/view.jsp";
	document.bbsForm.submit();
<%
	}
	else
	{
%>
	alert("<%=errorMsg%>");
	location.href = "/board/list.jsp";
<%
	}
%>
});
</script>
</head>
<body>
<form name="bbsForm" id="bbsForm" method="post">
	<input type="hidden" name="bbsSeq" value="<%=bbsSeq%>" />
	<input type="hidden" name="searchType" value="<%=searchType%>" />
	<input type="hidden" name="searchValue" value="<%=searchValue%>" />
	<input type="hidden" name="curPage" value="<%=curPage%>" />
</form>
</body>
</html>

 

값 세팅

 

24-25 수정한 제목과 내용 값이 담길 예정

- 나머지는 기존과 동일하다

 

 

28 게시글이 있고, 제목과 내용에도 값이 들어 있나?

55 else errorMsg = "게시물 수정값이 올바르지 않습니다."

 

31-32 여기서 정의하는 게시물은 수정되지 않은 방금 DB에서 막 불러온 원본임

36 게시물이 정상이고, 접속자와 게시자가 동일한가?

50 else errorMsg = "게시물이 존재하지 않습니다."

 

35-39 board.setxxXX()으로 수정한 값을 DB에 보내준다.

41-44 board에 담긴 값을 가지고 boardDao.boardUpdate()를 이용해 업데이트를 해준다. 

 - 그 값이 0보다 크다면(들어 있다면) 44 성공

45 else errorMsg = "게시물 수정 중 오류가 발생했습니다."

 

 

 

- updateProc.jsp의 경우에도 따로 페이지가 존재하지 않고 기능만 존재하는 파일이다. 

- 위에서 bSuccess가 정상적으로 처리 됐다면 70~72에 의해서 게시물 수정이 되고, bbsForm을 가지고 view.jsp로 이동을 한다.

- 실패를 했다면 alert에 위에서 설정했던 오류 중 하나가 뜰 것이다. 마찬가지로 bbsForm을 가지고 이번엔 list로 이동한다. view가 아니라 list로 이동하는 이유는 없는 게시글일 경우도 있기 때문

 

 

이것으로 게시판 만들기 기초는 끝났다.

 


 

금요일 수업은 4시간 밖에 못 잔 상태로 들어서 머리에 잘 들어오지도 않았고 500번대 오류도 났음ㅠㅠ 혼자 어찌어찌 해결하긴 했지만 수면의 질이 이렇게 중요하구나 또 한 번 느꼈다. 그래도 스프링 배우기 전에 깨우쳐서 다행이고, 다음주는 최대한 수면 조절도 하면서 수업 듣는 걸로~~ 소원이 있다면 최대한 수업시간에 빡 집중해서 이해하고 저녁에는 빨리 블로그 정리 하고 끝내고 싶다. 그게 맘처럼 쉽지 않지만 아직 어렵다고 느끼는데 벌써 JSP가 끝났다니 너무 아쉽고 걱정이 많이 된다. 나 프로젝트 할 수 있나??