상품관리 (상품 상세 보기 구현)
Back-End/Spring 2019. 6. 12. 12:29상품관리 (상품 상세 보기 구현)
상품이름에 링크를 걸어 상품 상세정보를 출력하고, 장바구니 기능을 사용할수있게 한다.
-상품 상세 보기-
1. list 파일에서 "상품상세보기" 링크를 클릭 하면 URL을 컨트롤러로 보낸다.
2. 그리고 끝에 들어가는 상품 번호는 URL에 포함된 변수이므로 @PathVariable로 저장이 된다.
3. list파일에서 보낸 URL을 컨트롤러에서 받고, 그 URL에 맞는 @RequestMapping된 메소드를 실행한다.
4. 매핑된 메소드 안에는 데이터를 보낼 뷰를 설정하고, 보낼 데이터를 동시에 설정하기 위해 ModelAndView 타입을 사용하고,
5. setViewName( ) 메소드 (데이터를 보낼 뷰의 위치) , addObject( ) 메소드 (보낼 데이터와 보낼 데이터의 이름을 지정) Product을
사용해 ModelAndView 타입으로 리턴한다. (즉, 상품번호를 리턴함)
6. DAO 구현 클래스에서 sqlsession의 selectone( ) 메소드를 사용해서 sqlsession에 저장된 값 중 하나 (상품번호) 를 리턴한다.
(단, namespace와 id를 맞게 입력을 해야 mapper과 매핑이 되니 주의)
7. mapper에서 select id에 namespace 이름을 적고, 조건을 설정해서 sql구문을 사용하기 위해
id에 인터페이스에서 구현한 product_id (상품번호)를 넣는다.
1. product_list 중 일부 (상품 상세보기를 하기 위해 상품이름에 링크를 거는 코드 추가)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <tr> <th>상품ID</th> <th>상품사진</th> <th>상품명</th> <th>가격</th> </tr> <c:forEach var="row" items="${list }"> <tr align = "center"> <td>${row.product_id }</td> <td><img src="${path }/images/${row.picture_url}" width="100" height = "100"></td> <td> <a href = "${path }/shop/product/detail/${row.product_id}"> ${row.product_name }</a> //끝에 상품 코드가 들어간다. 그리고 끝에 들어가는 상품 번호는 //URL에 포함된 변수이므로 @PathVariable로 저장이 된다. </td> | cs |
이 URL을 컨트롤러로 받아서 처리
2. ProductController.java 중 일부 (url 매핑 처리 코드 추가)
1 2 3 4 5 6 7 8 9 10 11 12 13 | //상세정보 페이지에서 URL이 매핑되서 실행 @RequestMapping("/detail/{product_id}") public ModelAndView detail( //아까 product_list 페이지에서 보낸 id와, @PathVariable("product_id") //URL에 포함된 변수이기 때문에 반드시 @PathVariable를 사용한다. int product_id, ModelAndView mav) { //데이터를 보낼 뷰를 설정하고, 보낼 데이터를 동시에 설정하기 위해 ModelAndView를 사용 //ModelAndView에 데이터를 보낼 뷰의 위치를 설정하고, //보낼 데이터를 설정하고, ModelAndView타입으로 리턴한다. mav.setViewName("/shop/product_detail"); mav.addObject("dto", productService.detailProduct(product_id)); return mav; } | cs |
3. ProductServiceImpl.java (서비스 인터페이스 구현 클래스) 중 일부
1 2 3 4 | @Override public ProductDTO detailProduct(int product_id) { return productDao.detailProduct(product_id); //상품아이디를 매개변수로 받아서 Dao에 있는 상품의 정보를 리턴 } |
4. ProductDAOImpl.java (DAO 인터페이스 구현 클래스) 중 일부
1 2 3 4 5 6 7 | @Override public ProductDTO detailProduct(int product_id) { return sqlSession.selectOne(//sqlsession에 저장된 값중에 하나를 리턴한다 (상품번호) "product.detail_product",product_id); //앞쪽에 namespace와 뒤쪽에 id를 적는다. 이렇게 해야 Mapper와 매핑이 된다. } | cs |
1. selectOne : 쿼리 결과가 없으면 null을 반환한다. 쿼리 결과로 레코드가 하나만 나와야 한다. DB에 레코드가 하나만 있는 경우에 사용 => 다수의 레코드가 있을 시 TooManyResultsException 에러가 발생 2. selectList : 쿼리 결과를 List<E>로 반환한다. 결과가 없을 시에는 빈 List를 반환한다 (null을 반환한다,) |
5. productMapper.xml 중 일부
하나의 데이터가 DTO에 저장이 되서 계속 넘어가는 구조
1 2 3 4 5 | <select id = "detail_product" resultType = "com.example.spring02.model.shop.dto.ProductDTO" > <!-- 상품 상세정보 확인 id --> select * from product where product_id=#{product_id} //select id에 namespace 이름을 적고, 조건을 설정해서 sql구문을 사용하기 위해 </select> //id에 인터페이스에서 구현한 product_id (상품번호)를 넣는다. | cs |
6. product_detail.jsp 파일 작성
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <%@include file="../include/header.jsp"%> </head> <body> <%@ include file="../include/menu.jsp"%> <h2>상품 정보</h2> <table> <tr> <!-- 이미지를 불러오기위한 url 작성 --> <td><img src="${path}/images/${dto.picture_url}" width="300px" height="300px"></td> <td align="center"> <table> <tr> <td>상품명</td> <td>${dto.product_name }</td> </tr> <tr> <td>가격</td> <td>${dto.price }</td> </tr> <tr> <td> </td> <td>${dto.description }</td> <!-- 상품 설명을 가져옴 --> </tr> <tr> <td colspan="2"> * 장바구니에 담기 기능 * <form name="form1" method="post" action="${path }/shop/cart/insert.do"> <input type="hidden" name="product_id" value="${dto.product_id }"> <!-- 상품코드를 히든타입으로 넘김 --> <select name="amount"> <c:forEach begin="1" end="10" var="i"> <option value="${i}">${i}</option> <!-- 장바구니에 10개 까지 담을수 있다.--> </c:forEach> </select> 개 <input type="submit" value="장바구니에 담기"> </form> <a href="${path}/shop/product/list.do">상품목록</a> </td> </tr> </table> </table> </body> </html> | cs |
'Back-End > Spring' 카테고리의 다른 글
상품관리 (장바구니 기능구현 - 삭제, 비우기, 수정) (3) | 2019.06.14 |
---|---|
상품관리 (로그인 / 로그아웃) (0) | 2019.06.12 |
상품관리 (상품 목록 보기 구현) (0) | 2019.06.12 |
상품테이블 만들기, File Upload 테스트 (0) | 2019.06.11 |
Oracle와 mybatis 연동 실습 (글수정, 글삭제 구현) (0) | 2019.06.10 |