코딩/Spring 쇼핑몰 프로젝트

Spring [쇼핑몰프로젝트] - 장바구니 페이지 구현[30]

유미._. 2023. 5. 22. 16:33
728x90

 

 

 

오늘은 장바구니 페이지 구현에 대한 여섯번째 포스팅을 해보겠습니다 ╰(*°▽°*)╯6

 

 

구현 순서

 

1. CartService.java

2. CartController.java

3. cart.jsp

 

 

1. CartService.java

 

장바구니 페이지에 회원이 담은 상품의 정보가 나오도록 Service 메서드를 추가해 줍니다.

CartService.java에 메서드를 추가해 줍니다.

 

	//장바구니 정보 리스트
	public List<CartDTO> getCartList(String memberId);

 

 

 

CartServiceImpl에 인터페이스에서 선언한 메서드를 오버라이딩 해줍니다.

 

 

 

 

List<CartDTO>에 getCart() 메서드를 호출하여 반환받은 값을 대입하여줍니다.

CartDTO의 일부 속성에는 값이 없기때문에 for문을 사용하여 List 요소로 있는 변수들을 초기화 해줍니다.

return 값으로 cart를 넣어 값이 들어간 cart를 반환해줍니다.

 

	@Override
	public List<CartDTO> getCartList(String memberId) {
		
		List<CartDTO> cart = cartMapper.getCart(memberId);
		
		for(CartDTO dto : cart) {
			dto.initSaleTotal();
		}
		return cart;
	}

 

 

 

2. CartController.java

 

장바구니 페이지로 이동 할 수 있도록 Controller를 작성해 줍니다.

memberId를 얻기 위해 파라미터 추가와 PathVariavle 패턴의 URL로 작성해 줍니다. 

장바구니 데이터를 뷰에 넘겨주기 위해 Model 파라미터도 추가해 줍니다. 

Model 객체의 addAttribute를 활용하여 장바구니 데이터를 전송하는 코드를 작성해 줍니다.

마지막으로 cart.jsp로 넘어갈 수 있도록 return값을 주었습니다.

 

	@GetMapping("/cart/{memberId}")
	public String cartPageGET(@PathVariable("memberId") String memberId, Model model) {
		
		model.addAttribute("cartInfo", cartService.getCartList(memberId));
		
		return "/cart";
	}

 

 

 

3. cart.jsp

 

main.jsp의 장바구니 부분에 href=# 으로 되어있던 부분에 "/cart/${member.memberId}" 경로를 지정해 줍니다.

이 외에 장바구니 버튼이 있는 모든 경로에 해당 경로를 지정해 줍니다. (상세페이지, 메인 2곳)

 

//메인페이지
<li><a href="/cart/${member.memberId}"><span class="glyphicon glyphicon-user"></span> 장바구니</a></li>

 

 

 

//메인페이지
<a href="/cart/${member.memberId}" class="btn btn-primary" role="button">장바구니</a>

 

 

 

//상세페이지
<button type="button" class="btn_cart"><a href="/cart/${member.memberId}">장바구니</a></button>

 

 

view 디렉토리에 cart.jsp를 생성해주고 ${cartInfo}를 사용하여 데이터가 넘어오는지만 확인해 줍니다.

 

 

 

 

 

 

테스트 ↓↓↓

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이상입니당 (∩^o^)⊃━☆

 

 

 

 

 

 

 

 

 

참고 : Kim VamPa (tistory.com) 👍

 

 

728x90
반응형