관리자 글쓰기
본 내용은 혼자 공부하기 위하여 다른 포스트를 보면서 저에게 필요한 부분과 궁금했던 부분을 추가하여 게시하는 곳입니다.

궁금한 것에 대한 것은 모르는 것이 많겠지만 함께 알아보도록 노력하겠습니다.


참조 게시 포스트 : http://addio3305.tistory.com/


-------------------------------------------------------------------------------------------------------------------------------------------

1. 게시글 수정하기

1.1 Controller 에 추가하기

SampleController.java 에 추가하기

	@RequestMapping(value="/sample/openBoardModify.do")
	public ModelAndView openBoardModify(CommandMap commandMap) throws Exception{
		ModelAndView mv = new ModelAndView("/sample/boardModify");
		Map<String,Object> map = sampleService.selectBoard(commandMap.getMap());
		mv.addObject("map",map);
		return mv;
	}
	
	@RequestMapping(value="/sample/modifyBoard.do")
	public ModelAndView modifyBoard(CommandMap commandMap) throws Exception{
		ModelAndView mv = new ModelAndView("redirect:/sample/openBoardDetail.do");
		sampleService.modifyBoard(commandMap.getMap());
		
		mv.addObject("IDX", commandMap.get("IDX"));
		return mv;
	}

- 위 메서드는 수정하기 페이지로 가는 메서드로 게시판에 대한 정보는 아까 생성했던 selectBoard를 통해서 가져오기 때문에 Service 단 이후로 만들 필요는 없다. 마찬가지로 map을 파라미터로 가져간다.


- 다음 메서드는 수정하기에 대한 처리의 매핑 메서드로 리다이렉트로 게시글 상세보기로 돌아가며 돌아갈 때 필요한 IDX를 파라미터로 넘겨준다. 그리고 modifyBoard를 이용하여 서비스단 처리를 호출한다.



1.2 Service. ServiceImpl

SampleService.java 에 추가

	void modifyBoard(Map<String,Object> map) throws Exception;


SampleServiceImpl.java 에 추가

	@Override
	public void modifyBoard(Map<String, Object> map) throws Exception {
		sampleDAO.modifyBoard(map);
	}

- 수정하기에 대한 처리를 위한 부분만 만들어주면 된다. 특별한 것은 없다.



1.3 DAO

SampleDAO.java 에 추가

	public void modifyBoard(Map<String,Object> map) {
		update("sample.modifyBoard",map);
	}

- DAO에서도 특별한 점은 없다.



1.4 SQL

sample_SQL.xml 에 추가

     <update id="sample.modifyBoard" parameterType="hashmap">
     	<![CDATA[
     		UPDATE TB_BOARD1
     		SET
     			TITLE=#{TITLE},
     			CONTENTS=#{CONTENTS}
     		WHERE
     			IDX=#{IDX}
     	]]>
     </update>

- 앞으로 살펴볼 jsp 파일에서 폼에 대한 정보를 가져오면서 TITLE, CONTENTS, IDX의 값을 사용할 수 있었다. 다음 JSP파일에서 살펴보자.



1.5 JSP

boardModify.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>글 수정하기</title>
<%@ include file="/WEB-INF/include/include-header.jspf" %>
</head>
<body>
	<form id="frm">
		<table class="board_view">
			<caption>글 수정하기</caption>
			<colgroup>
				<col width="15%">
				<col width="*">
			</colgroup>
			<tbody>
                <tr>
                    <th scope="row">글 번호</th>
                    <td>${map.IDX }</td>
                    <th scope="row">조회수</th>
                    <td>${map.HIT_CNT }</td>
                </tr>
                <tr>
                    <th scope="row">작성자</th>
                    <td>${map.CREA_ID }</td>
                    <th scope="row">작성시간</th>
                    <td>${map.CREA_DTM }</td>
                </tr>
                <tr>
                    <th scope="row">제목</th>
                    <td colspan="3">
                        <input type="text" id="TITLE" name="TITLE" class="wdp_90" value="${map.TITLE }"/>
                    </td>
                </tr>
                <tr>
                	<th scope="row">내용</th>
                    <td colspan="3" class="view_text">
                        <textarea rows="20" cols="100" title="내용" id="CONTENTS" name="CONTENTS">${map.CONTENTS }</textarea>
                    </td>
                </tr>
            </tbody>
		</table>
	</form>
	<a href="#this" id="list" class="btn">목록으로</a>
	<a href="#this" id="modify" class="btn">수정하기</a>
	<a href="#this" id="delete" class="btn">삭제하기</a>
	
	<%@ include file="/WEB-INF/include/include-body.jspf" %>
	<script type="text/javascript">
		$(document).ready(function(){
			$("#modify").on("click",function(e){
				e.preventDefault();
				fn_modifyBoard();
			})
			$("#list").on("click",function(e){
				e.preventDefault();
				fn_openBoardList();
			})
			$("#delete").on("click",function(e){
				e.preventDefault();
				fn_deleteBoard();
			})
		})
		
		function fn_modifyBoard(){
			var comSubmit = new ComSubmit("frm");
			comSubmit.setUrl("<c:url value='/sample/modifyBoard.do'/>");
			comSubmit.submit();
		}
		function fn_openBoardList(){
			var comSubmit = new ComSubmit();
			comSubmit.setUrl("<c:url value='/sample/openBoardList.do'/>");
			comSubmit.submit();
		}
		function fn_deleteBoard(){
			var comSubmit = new ComSubmit("frm");
			comSubmit.setUrl("<c:url value='/sample/deleteBoard.do'/>");
			comSubmit.submit();
		}
	</script>
</body>
</html>

- 거의 형식은 상세보기와 비슷하다. 그러므로 밑의 jQuery 부분만 살펴보자면 수정하기 부분에서 form을 할당하여 게시글의 정보를 넘겨주는 것을 볼 수 있다. 삭제하기 부분도 마찬가지이다. "frm"을 넘겨줌으로써 새로운 request에게 어떤 게시글의 IDX인지와 TITLE, CONTENTS 값을 넘겨준다. 삭제하기도 마찬가지로 IDX값을 넘겨줘야 하므로 "frm"을 할당하여 주는 것을 볼 수 있다.


2. 게시글 삭제하기

- 게시글 삭제하기에는 따로 페이지는 없고 수정하기 페이지에서 삭제하기에 대한 기능만 처리해주면 된다. 따라서 jsp파일은 따로 만들 필요가 없고 Controller, Service, DAO, SQL만 작성하면 된다.


2.1 Controller

SampleController.java 에 추가

	@RequestMapping(value="/sample/deleteBoard.do")
	public ModelAndView deleteBoard(CommandMap commandMap) throws Exception{
		ModelAndView mv = new ModelAndView("redirect:/sample/openBoardList.do");
		sampleService.deleteBoard(commandMap.getMap());
		
		return mv;
	}

- 일반적인 기능에 대한 매핑 메서드이다.


2.2 Service, ServiceImpl

SampleService.java 에 추가

	void deleteBoard(Map<String,Object> map) throws Exception;

SampleServiceImple.java 에 추가


	@Override
	public void deleteBoard(Map<String, Object> map) throws Exception {
		sampleDAO.deleteBoard(map);
	}

- 서비스 부분도 여태까지 살펴온 것과 동일하다.



2.3 DAO

SampleDAO.java 에 추가

	public void deleteBoard(Map<String, Object> map) {
		update("sample.deleteBoard",map);
	}

- DAO 부분도 동일하다.



2.4 SQL

sample_SQL.xml 에 추가

     <update id="sample.deleteBoard" parameterType="hashmap">
     	<![CDATA[
     		UPDATE TB_BOARD1
     		SET
     			DEL_GB='Y'
     		WHERE
     			IDX=#{IDX}
     	]]>
     </update>

- 게시물 삭제라고 삭제하지 않고 DEL_GB 속성을 Y로 하여 삭제한 것처럼 보이지 않게 하였다. 만약에 복구가 필요한 상황에 대비하기 위하여 이런 식으로 만들었다.


3. 수정하기, 삭제하기 테스트


- 수정하기 페이지이다. 수정할 내용을 입력하고 수정하기를 누른다.




- 완료가 되는 모습을 볼 수 있다. 여기까지 왔다면 수정하기가 잘 작성된 것이다.




- 수정하기 페이지에 대한 로그창이다.



- 수정하기 처리에 대한 로그창이다.




- 삭제하기가 완료된 화면이다.




- 삭제하기 처리에 대한 로그이다.


이렇게 뜬다면 여기까지 잘 따라온 것이다.

여기까지 따라하면서 배운 지식을 바탕으로 삭제된 게시글 리스트를 만들어보고 복구하는 처리에 대해서 각자 만들어보자.