64. spring으로 게시물 삭제하기

hanahana·2022년 9월 13일
0

Spring 학원수강

목록 보기
17/45
post-thumbnail

왜 아까 게시물 상세 페이지에서는64. spring으로 상세 게시물 보기 (velog.io) board_No를 세션에 넣었을까?

상세 jsp확인하기

<table align="center" border="1">
			<tr>
				<td>제목</td>
				<td>${board.boardTitle }</td>
			</tr>
			<tr>
				<td>작성자</td>
				<td>${board.boardWirter }</td>
				
	
			</tr>
			<tr>
				<td>작성일</td>
				<td>${board.bCreateDate }</td>
			</tr>
			<tr>
				<td>내용</td>

				<td>
						${board.boardContents }
						<br>
						
						<c:if test="${board.boardRename ne null}">
						<img alt="본문이미지" src="/resources/buploadFiles/${board.boardRename }">

						</c:if>
						</td>
			</tr>
		
			<tr>
				<td colspan="2"><input type="button" value="수정" onclick="location.href='/board/modifyView.kh?boardNo=${board.boardNo}';"> 
				<button type="button" onclick="location.href='/board/list.kh?page=${pageNow }';">목록</button>
				<button type="button" onclick="remove()">삭제</button>
				</td>
			</tr>

		</table>

	</form>
	
	<script>
		function remove() {
			event.preventDefault(); // 하이퍼링크 이동방지
			if(window.confirm("게시물을 삭제하시겠습니까?")){
			location.href='/board/remove.kh';
						
			}
			
			
		}
	
	</script>
  • 하단에 수정, 삭제, 목록 버튼이 있다.
  • 지금은 삭제이야기니까 삭제만..
    • 삭제버튼을 누르면 remove함수와 연결되는것을 확인할수있다.
    • 스크립트를 확인하면 새창으로 게시물을 삭제할지를 확인하고 확인을 누른경우에면 board/remove.kh로 연결된다.

Controller

@RequestMapping (value="board/remove.kh", method = RequestMethod.GET)
	public String boardReomve(HttpSession session, Model model) {
		
		int pageNow= (int) session.getAttribute("pageNow");
//이건 page로 돌아갈때 이전에 보던 페이지로 넘어갈수있도록 지정해놓은 session 값이다.
		try {
		int boardNo = (int)session.getAttribute("boardNo");
	
		int result = bService.removeOneByNo(boardNo);
		if(result>0) {
			session.removeAttribute("boardNo"); //한가지의 세션만 지운다.
		}
		}catch (Exception e) {
			model.addAttribute("mgs",e.getMessage());
			return "/common/errorPage";
		}
		String dierctPage ="redirect:/board/list.kh?page="+pageNow;
		session.removeAttribute("pageNow");
		return dierctPage;
		
	}
  • 삭제를 눌러 해당 서블릿으로 접속하면 세션에 저장되어있었던 boadNo를 변수로 초기화 시킬수있다.
  • ?= 방식으로 boardNo를 가져오지 않아도 detail에서 boardNo를 세션이 넣어두었기때문에 세션값을 이용하여 원하는 페이지를 삭제할수있다.
  • 사용한 세션은 지워주어야 오류가 생기지 않는다.

int result = bService.removeOneByNo(boardNo); 를 이용하여 삭제service로 이동한다.

Service Store Mapper

Service

@Override
	public int removeOneByNo(int boardNo) {
		int result = bStore.deleteOnebyNo(session, boardNo);
		return result;
	}
  • 전송값 session과 함께 넘기고 받은값 반환

Store

@Override
	public int deleteOnebyNo(SqlSessionTemplate session, int boardNo) {
		int result = session.delete("BoardMapper.deleteBoardOne", boardNo);
		return result;
	}
  • session을 이용하여 데이터베이스와 접속해 해당 mapper id의 쿼리문사용

Mapper

<delete id="deleteBoardOne">
delete from board_tbl where board_no =#{boardNo}
</delete>
  • 전송받은 boardNo를 이용해 쿼리문으로 게시물을 삭제한다.

다시 controller로

 @RequestMapping (value="board/remove.kh", method = RequestMethod.GET)
	public String boardReomve(HttpSession session, Model model) {
		
		int pageNow= (int) session.getAttribute("pageNow");
//이건 page로 돌아갈때 이전에 보던 페이지로 넘어갈수있도록 지정해놓은 session 값이다.
		try {
		int boardNo = (int)session.getAttribute("boardNo");
	
		int result = bService.removeOneByNo(boardNo);
		if(result>0) {
			session.removeAttribute("boardNo"); //한가지의 세션만 지운다.
		}
		}catch (Exception e) {
			model.addAttribute("mgs",e.getMessage());
			return "/common/errorPage";
		}
		String dierctPage ="redirect:/board/list.kh?page="+pageNow;
		session.removeAttribute("pageNow");
		return dierctPage;
		
	}
  • 삭제가 완료되면 이제 아까 받았던 boardNo의 세션을 삭제하고 게시물 리스트로 이동한다
  • 하지만 내가 원래보던 페이지로 이동할수 없을까?
  • 똑같이 session을 이용하면된다.
    • 여기에서는 보이지 않지만 list.kh에 session값에 현재 page인 PageNow를 세션으로 지정해주었다.
    • 이 페이지를 pageNow라는 변수에 저장하고 list,kh?page=값을 pageNow로 지정해주면 세션에 저장된 원래 보던 page로 갈수있다.
    • 오류가 생기지 않게 pageNow의 값은 페이지를 이동하기 전에 세션에서 삭제한다.
profile
hello world

0개의 댓글