느림보 개발
11. SpringMVC - 게시글 수정 및 삭제 본문
구현할 기능 : 게시글 수정 및 삭제
전체 흐름 : 게시글 상세 페이지에서 수정, 삭제 기능을 사용할 수 있도록 버튼 생성 후 수정, 삭제에 맞는 로직 작성
수정 같은 경우 → 수정 페이지를 따로 생성하여 원래의 글을 출력하고 그 공간에서 수정할 수 있도록 함
jsp
▶ 글 상세페이지 - 글수정, 글 삭제 버튼
- 파라미터로 dno를 넘겨준다. → 컨트롤러는 dno값을 통해 수정할 글을 불러오게 한다.
<button type="button" class="btn btn-primary btn-modify" onclick="location.href='/board/mydiaryupdate?dno='+'${vo.dno}'">수정</button>
<button type="button" class="btn btn-primary btn-modify" onclick="location.href='/board/mydiarydelete?dno='+'${vo.dno}'">삭제</button>
▶ 글수정 페이지
- 매핑한 주소로 POST 요청
- POST요청이므로 CSRF 토큰을 hidden으로 같이 전송
- 게시글 상세 조회시 dno를 따로 출력하지 않았기 때문에 hidden 으로 심는다.
<form action="/board/mydiaryupdate" method="post">
<div class="col-md-12">
<div class="form-group">
<input type="text" class="form-control" name="title" value=${vo.title } >
</div>
</div>
.. 생략 ..
<input type ="hidden" name=dno value="${vo.dno }">
<input type="hidden" name="${_csrf.parameterName }" value="${_csrf.token }">
.. 생략 ..
</form>
▶글 삭제
- 게시글 상세페이지에서 바로 처리되도록 하였다.
Controller
▶글수정 페이지
- 글 수정버튼을 통해 글 수정 페이지로 들어 왔을 때, 파라미터로 dno를 전달하였다.
- dno를 가지고 글 상세페이지 때와 같이 서비스의 readD메서드를 통해 글 정보를 가져와 JSP페이지에 초기 value 값으로 세팅한다.
// 글 수정 GET : 기존 정보 출력 + 수정할 정보 입력
@GetMapping("/mydiaryupdate")
public void getMydiaryupdate(@RequestParam("dno") int dno, Model model) throws Exception {
log.info("getMydiaryupdate() 호출 - 일기 수정 ");
log.info("게시글 넘버는 ?? "+dno);
model.addAttribute("vo",service.readD(dno));
log.info("getMydiaryupdate() 호출 - 일기 수정 완료 @@ ");
}
//글 수정 POST
@PreAuthorize("principal.username == #vo.userid")
@PostMapping("/mydiaryupdate")
public String posttMydiaryupdate(DiaryBoardVO vo) throws Exception {
log.info("postMydiaryupdate() 호출 - 일기 수정 ");
log.info("수정할 정보"+vo);
int cnt = service.updateD(vo);
log.info("게시글 수정 완료 !!!!!!!!!!!!!!!!!!!!!!!");
return "redirect:/board/mydiary";
}
// 글 삭제 GET
@PreAuthorize("principal.username == #userid")
@GetMapping("/mydiarydelete")
public String deleteGET(@RequestParam("dno")int dno, RedirectAttributes rttr, String userid) throws Exception {
log.info("deleteGET() 호출 -- 다이어리 글 삭제 ");
log.info("삭제할 게시글 넘버?? "+dno);
service.deleteD(dno);
log.info("게시글 삭제 완료 !!!!!!!!!!!!!!!!!!!!!!!");
return "redirect:/board/mydiary";
}
Service, Impl & DAO, Impl
// Service - 글 상세
public DiaryBoardVO readD(Integer dno) throws Exception;
// Service - 글 수정
public int updateD(DiaryBoardVO vo) throws Exception;
// Service - 글 삭제
public int deleteD(int dno) throws Exception;
// ServiceImpl - 글 상세
@Override
public DiaryBoardVO readD(Integer dno) throws Exception {
DiaryBoardVO readList = dao.readD(dno);
return readList;
}
// ServiceImpl - 글 수정
@Override
public int updateD(DiaryBoardVO vo) throws Exception {
log.info("Service : updateD(DiaryBoardVO vo) 호출");
int cnt = dao.updateD(vo);
return 0;
}
// ServiceImpl - 글 삭제
@Override
public int deleteD(int dno) throws Exception {
int cnt = dao.deleteD(dno);
return 0;
}
// DAO - 글 상세
public DiaryBoardVO readD(Integer dno) throws Exception;
// DAO - 글 수정
public int updateD(DiaryBoardVO vo) throws Exception;
// DAO - 글 삭제
public int deleteD(int dno) throws Exception;
// DAOImpl- 글 상세
@Override
public DiaryBoardVO readD(Integer dno) throws Exception {
return sqlSession.selectOne(NAMESPACE+".readD",dno);
}
// DAOImpl- 글 수정
@Override
public int updateD(DiaryBoardVO vo) throws Exception {
log.info("DAO : updateD(DiaryBoardVO vo) 호출");
int cnt = sqlSession.update(NAMESPACE+".updateD",vo);
return 0;
}
// DAOImpl- 글 삭제
@Override
public int deleteD(int dno) throws Exception {
log.info("deleteD(int dno) 호출");
int cnt = sqlSession.delete(NAMESPACE+".deleteD",dno);
return 0;
}
mapper
<!-- 글 상세-->
<select id="readD" resultType="com.ddd.domain.DiaryBoardVO">
select * from tbl_diary_board
where dno=#{dno}
</select>
<!-- 글 수정 -->
<update id="updateD">
update tbl_diary_board
set title=#{title}, content=#{content}, score=#{score}
where dno=#{dno}
</update>
<!--글 삭제 -->
<delete id="deleteD">
delete from tbl_diary_board
where dno=#{dno}
</delete>
▼ 수정
▼ 삭제
'코드 정리 > Spring Framework' 카테고리의 다른 글
10. SpringMVC - 게시글 목록 조회 및 상세 페이지 (0) | 2023.01.29 |
---|---|
9. SpringMVC - 게시글 작성 (2) | 2023.01.29 |
8. SpringMVC - 나의 위치 정보 저장 (0) | 2023.01.29 |
7. SpringMVC - 페이징 처리 (0) | 2023.01.24 |
6. SpringMVC - Ajax 통신을 통해 아이디 중복 체크 하기 (1) | 2023.01.17 |
Comments