궁금한 것에 대한 것은 모르는 것이 많겠지만 함께 알아보도록 노력하겠습니다.
참조 게시 포스트 : 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;
@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. 수정하기, 삭제하기 테스트
- 수정하기 페이지이다. 수정할 내용을 입력하고 수정하기를 누른다.
- 완료가 되는 모습을 볼 수 있다. 여기까지 왔다면 수정하기가 잘 작성된 것이다.
- 수정하기 페이지에 대한 로그창이다.
- 수정하기 처리에 대한 로그창이다.
- 삭제하기가 완료된 화면이다.
- 삭제하기 처리에 대한 로그이다.
이렇게 뜬다면 여기까지 잘 따라온 것이다.
여기까지 따라하면서 배운 지식을 바탕으로 삭제된 게시글 리스트를 만들어보고 복구하는 처리에 대해서 각자 만들어보자.
'코딩 > Spring' 카테고리의 다른 글
Spring 개발 - 게시판 만들기(14) - 파일 다운로드 (0) | 2018.01.01 |
---|---|
Spring 개발 - 게시판 만들기(13) - 파일 업로드 (1) | 2017.12.30 |
Spring 개발 - 게시판 만들기(11) - 게시글 상세보기 (0) | 2017.12.26 |
Spring 개발 - 게시판 만들기(10) - 게시글 쓰기 (0) | 2017.12.25 |
Spring 개발 - 게시판 만들기(9) - HandlerMethodArgumentResolver 적용 (0) | 2017.12.25 |