Stay Hungry Stay Foolish

PROJECT/[스프링 부트] 게시판

[스프링 부트] 6. 게시판 만들기 삭제 처리

dev스카이 2023. 10. 25. 20:28

01. 삭제 버튼 생성

삭제 버튼을 생성하고, 버튼을 클릭하면 삭제 처리를 한다.

  1. html 파일에 버튼을 추가
  2. 처리 service
  3. controller에 url 매핑
  4. thymeleaf로 처리

 

01-1. boardview.html에 삭제 버튼 추가

<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>게시글 상세 페이지</title>
</head>
<body>
    <h1 th:text="${article.title}">제목입니다.</h1>
    <p th:text="${article.content}">내용이 들어갈 부분입니다.</p>
    <a href="">글삭제</a> <!-- 추가한 곳 -->
</body>
</html>

버튼으로도 가능(<a> 태그 대신에 아래 코드를 넣어주면 된다.)

<button>삭제하기</button>

 

실행하기(http://localhost:8080/board/view?id=1)

좌 - <a> 태그,  우 - <button> 태그 

 

01-2. BoardService에 메소드 추가 (처리 Service) 

• deleteById

  • Entity의 id를 넘겨 삭제 처리를 한다.
  • Spring Data CrudRepository interface의 구현체인 SimpleJpaRepository에 정의되어있다. (delete도 있음)
  • findById로 조회한 데이터가 없을 경우, EmptyResultDataAccessException을 발생시킨다.

• void는 반환 타입이 없는 걸 의미한다. (글을 삭제하는 것이므로 반환할 게 없다.)

• 앞에서 구현했던 작성, 리스트, 게시글 코드와 다르게 반환형이 void이기 때문에 return이 필요없다.

 

로직 : id값에 1이 들어왔을 때, 1번 Id값을 가진 글을 deleteById를 통해 삭제한다.(id값 = 파라미터)

 

01-3. BoardController에 메소드 추가(url Mapping)

• redirect:

  • 어원은 Re(다시) + direct(요청하다/지시하다)이며, 구체적으로는 웹 브라우저가 웹 서버에 어떤 URL을 요청했을 때, 서버가 리다이렉트를 지시하는 특정 HTTP 응답[1]을 통해 웹 브라우저로 하여금 지정된 다른 URL로 재요청하라고 지시하는 것을 말한다.
  • 쉽게 말해, 글이 삭제되면 리스트 화면으로 넘어가는 게 일반적이므로 리스트로  이동(선행)시킨다. 따라서 redirect: 뒤에 이동시킬 경로를 지정해준다.

 

로직 : /board/delete 주소로 들어왔을 때 id값(파라미터)을 찾아내서 넘어온 id값을 Service에 보내주면 삭제 처리가 된다.

 

실행하기(http://localhost:8080/board/list)

list에서 1번의 '제목 작성 테스트' 글이 삭제 되었다.

 

01-4. boardview.html에서 태그 수정 (thymeleaf)

이제 상세 페이지에서 버튼을 클릭하여 삭제가 되도록 한다. 

내용 상기 : 타임리프 사용 이유 - 글이 여러 개 있으므로 각각 맞는 페이지를 삭제하기 위해서

 

<a> 태그 

<a th:href="@{/board/delete(id=${article.id})}">글삭제</a>

 

 

<button> 태그

<button th:onclick="|location.href='@{/board/delete(id=${article.id})}'|">삭제하기</button>

컨트롤러에서 넘긴 URL변수 이용

    • th:onclick="함수명([[${파라미터명.value값}]])"

location.href를 이용한 경로 이동

  • th:onclick="|location.href='@{html이름(파라미터명=${value값})}'|"

 

실행하기

버튼 태그

상세페이지에서 버튼을 누르면 글이 삭제된다.

'제목 1' 페이지에서 삭제 버튼을 눌렀더니 리스트 페이지로 넘어가고 '제목 1'이 사라진 것을 볼 수 있다. 


※ 상세 페이지를 중앙으로 정렬하고 싶으면 html 파일에서 <body> 태그를 아래와 같이 수정하면 된다.

<body style="text-align: center;">