일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 스프링 쇼핑몰
- 스프링 파일 삭제
- ResponseEntity
- 스프링 이미지
- 스프링 프로젝트 기본 설정
- 로그아웃 기능 구현
- 스프링 프로젝트 설정
- Bcrypt
- 삭제 구현
- spring 쇼핑몰
- 쇼핑몰 프로젝트
- 스프링 업로드
- 정규표현식
- 파일 업로드
- 인증번호 전송
- BCrypt 적용
- arraylist
- 로그인 기능
- 스프링 프로젝트
- 쇼핑몰 포트폴리오
- 스프링 쇼핑몰 프로젝트
- 회원가입 기능
- 스프링 게시판 구현
- spring 프로젝트
- 스프링 HikariCP
- 스프링 게시판
- 이미지 출력
- oracle 설치방법
- 스프링 포트폴리오
- 스프링 메일 전송
- Today
- Total
Kim VamPa
[Spring][쇼핑몰 프로젝트][39] 장바구니 기능(장바구니 삭제) 본문
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188
목표
장바구니 품목 삭제 구현
장바구니 페이지 상품란에 '삭제' 버튼을 누르면 장바구니 품목에서 제거되는 기능 구현을 목표로 합니다.
순서
1. 개요
2. 서버 측 구현
2.1 CartService
2.2 CartController.java
3. 뷰 측 구현
4. 테스트
1. 개요
'장바구니 삭제' 구현은 크게 서버 측, 뷰 측 작업으로 나누어서 진행합니다.
'서버 측' 구현의 경우 '뷰'에서 품목 삭제 요청과 함께 "장바구니 id(cartId)"를 전달받으면 DB vam_cart 테이블에서 요청받은 cartId'를 가지는 행을 제거해야 합니다.
'뷰 측' 사용자가 원하는 품목의 '삭제' 버튼을 눌렀을 때 '장바구니 품목 삭제' 요청와 함께 '장바구니 id'를 함께 전성하도록 하도록 구현할 것입니다.
2. 서버 측 구현
DB에 장바구니 수량 변경 쿼리가 동작하도록 만드는 Mapper 메서드(deleteCart())는 이미 만들어 두었습니다. 이를 호출하는 Service 메서드를 만들어 주겠습니다
2.1 CartiService
CartService.java
CartService.java 인터페이스에 아래의 메서드 선언부를 추가해줍니다.
/* 카트 삭제 */
public int deleteCart(int cartId);
CartServiceImpl.java
인터페이스에서 선언한 메서드를 오버라이딩 해서 구현부를 작성해줍니다.
@Override
public int deleteCart(int cartId) {
return cartMapper.deleteCart(cartId);
}
2.2 CartController.java
장바구니 품목 삭제를 수행하는 URL은 POST 방식으로서 경로를 "/cart/delete"로 할 것입니다. CartController.java에 아래의 URL 매핑 메서드를 추가해줍니다. 작성한 메서드가'cartId' 'memberId'를 전달받도록 파라미터를 부여해하는데 한 번에 받아들일 수 있도록 CartDTO를 파라미터로 부여했습니다.
'cartId'의 경우 품목 삭제에 필요로한 데이터고 'memberId'는 장바구니 페이지 이동에 필요로 한 데이터입니다.
/* 장바구니 수량 수정 */
@PostMapping("/cart/update")
public String updateCartPOST(CartDTO cart) {
}
구현부에 앞서 만든 Service 메서드를 호출하고, '장바구니 페이지'에 리다이렉트 방식으로 이동하도록 return 값을 부여합니다.
장바구니 페이지로 이동하는 url은 "/cart/사용자아이디"이기 때문에 아래와 같이 작성했습니다.
/* 장바구니 수량 수정 */
@PostMapping("/cart/update")
public String updateCartPOST(CartDTO cart) {
cartService.modifyCount(cart);
return "redirect:/cart/" + cart.getMemberId();
}
3. 뷰 측 구현
본격 구현 전 '삭제' 버튼 객체에 쉽게 접근하기 위해 <button>태그에 class 속성을 부여해주었습니다. (<button> 태그를 감싸는 <td> 태그에 delete_btn 클래스 속성 값이 부여되어 있는지 지우고 <button> 태그의 class 속성에 'delete_btn'을 값으로 부여해줍니다.
<button class="delete_btn">삭제</button>
더불어 태그의 data 속성을 이용하여 상품의 cartId 값을 <button>태그에 심어줍니다.
<button class="delete_btn" data-cartid="${ci.cartId}">삭제</button>
<form> 태그 추가
'cart/delete'요청과 함께 서버에 데이터를 보낼 수 있도록 'cartId', 'memberId' 값들이 저장된 <input> 태그를 감 싸는 <form> 태그를 추가해줍니다. 위치는 상관없고, 저의 경우 contents <div> 태그 맨 아래 공간에 추가해주었습니다.
<!-- 삭제 form -->
<form action="/cart/delete" method="post" class="quantity_delete_form">
<input type="hidden" name="cartId" class="delete_cartId">
<input type="hidden" name="memberId" value="${member.memberId}">
</form>
삭제 요청 Js코드
사용자가 삭제 버튼인 <button> 태그를 클릭했을 때 동작하는 메서드를 <script> 태그 내부에 작성합니다.
/* 장바구니 삭제 버튼 */
$(".delete_btn").on("click", function(e){
});
메서드 구현부에 먼저 <button> 기본 동작이 되지 않도록 preventDefault() 메서드를 호출해주고, cartId변수를 선언하여 해당 객체(클릭된 <button> 태그 객체)의 '장바구니 id' 값을 대입해줍니다.
장바구니 id : 클릭된 <button> 태그에 (data속성을 통해) 심어진 cartId
/* 장바구니 삭제 버튼 */
$(".delete_btn").on("click", function(e){
e.preventDefault();
const cartId = $(this).data("cartid");
});
구한 값을 앞서 작성한 <form> 태그 내부에 작성된 <input> 태그에 저장한 후, <form> 태그를 서버로 전송하는 코드를 작성합니다.
/* 장바구니 삭제 버튼 */
$(".delete_btn").on("click", function(e){
e.preventDefault();
const cartId = $(this).data("cartid");
$(".delete_cartId").val(cartId);
$(".quantity_delete_form").submit();
});
4. 테스트
작업한 기능이 잘 구현되었는지 테스트를 해봅니다.
REFERENCE
DATE
- 2020.12.01
'스프링 프레임워크 > 쇼핑몰 프로젝트' 카테고리의 다른 글
[Spring][쇼핑몰 프로젝트][41] 주문 구현(주문 페이지) - 1 (0) | 2021.12.08 |
---|---|
[Spring][쇼핑몰 프로젝트][40] 주문 구현 방향 & 주문 테이블 설계 (0) | 2021.12.07 |
[Spring][쇼핑몰 프로젝트][38] 장바구니 기능(수량 수정) (3) | 2021.11.30 |
[Spring][쇼핑몰 프로젝트][37] 장바구니 기능(장바구니 페이지) -4 (0) | 2021.11.29 |
[Spring][쇼핑몰 프로젝트][37] 장바구니 기능(장바구니 페이지) -3 (21) | 2021.11.25 |