10/06/2018

스프링 쇼핑몰 만들기 #9. 상품목록과 상품조회 기능 구현

스프링 쇼핑몰 만들기
- 깃허브 링크

이번엔 상품목록과 상품조회 기능을 구현하겠습니다. 이것 또한 게시판의 게시물 목록게시물 조회 기능과 다르지 않습니다.

목록화면으로 사용할 list.jsp를 만듭니다. 새로 만들필요 없이 register.jsp를 복사한 뒤 <div id="container_box"> 내부의 코드를 제거하고, 사용하지 않는 스크립트 <script> ~ </script> 를 지워줍니다.

컨트롤러에 list 메서드를 생성합니다.

그리고 aside.jsp에 상품목록으로 이동할 수 있도록 링크를 추가합니다.

상품 목록 링크를 클릭하면 list.jsp로 이동된걸 확인할 수 있습니다. 하지만 아직 다른 데이터는 없기 때문에 횡합니다.

데이터를 준비하기 위해 쿼리문을 테스트합니다.

매퍼에 쿼리를 추가합니다.

<!-- 상품 목록 --> 
<select id="goodslist" resultType="com.kubg.domain.GoodsVO">
 select
  gdsNum, gdsName, cateCode, gdsPrice, gdsStock, gdsDes, gdsImg, gdsDate
    from tbl_goods
        order by gdsNum desc
</select>

DAO와 Service에 코드를 작성합니다.

컨트롤러의 list 메서드에 코드를 추가합니다.

list.jsp에 라이브러리를 추가합니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

이제 list.jsp의 <div id="container_box"> 에 코드를 추가합니다.

<table>
 <thead>
  <tr>
   <th>번호</th>
   <th>이름</th>
   <th>카테고리</th>
   <th>가격</th>
   <th>수량</th>
   <th>등록날짜</th>
  </tr>
 </thead>
 <tbody>
  <c:forEach items="${list}" var="list">
  <tr>
   <td>${list.gdsNum}</td>
   <td>${list.gdsName}</td>
   <td>${list.cateCode}</td>
   <td>${list.gdsPrice}</td>
   <td>${list.gdsStock}</td>
   <td>${list.gdsDate}</td>
  </tr>   
  </c:forEach>
 </tbody>
</table>

게시판 목록 구현과 마찬가지로 forEach를 이용합니다.

이제 목록 화면으로 이동해보면 나오긴하는데... 가격과 날짜 부분을 조금 손봐야겠습니다.

가격과 날짜에 포맷을 적용합니다.

또, 값이 서로 붙어있기 때문에 적당한 크기를 부여합니다.

<style>
#container_box table td { width:100px; }
</style>

이제 서로 떨어져서 보기도 좋고, 가격과 날짜가 포맷을 적용한대로 나와서 확인하기 좋아졌습니다.

마지막으로 상품 이름 부분에 링크 태그를 추가합니다.

<a href="/admin/goods/view?n=${list.gdsNum}">${list.gdsName}</a>
/admin/goods/view?n=[상품번호] 형식으로 주소가 만들어지며, 상품번호를 이용해 상품들을 중복없이 구분할 수 있습니다.

이름부분이 링크처리되었지만, 아직 조회(view)기능이 구현되지 않았습니다.

조회 기능을 구현하기 위해, register.jsp를 복사한뒤 view.jsp로 이름을 변경합니다.

컨트롤러에 view 메서드를 생성합니다.

이제 목록에서 상품이름 링크를 클릭하면 조회 화면으로 이동할 수 있지만, 데이터를 가져오는 작업을 하지 않았기 때문에 내용은 없습니다.

특정 상품만 불러오는 쿼리를 작성합니다. 목록에 이용한 쿼리에서 조건문만 넣어주면 됩니다.

작성한 쿼리를 매퍼에 추가합니다.

<!-- 상품 조회 -->
<select id="goodsView" resultType="com.kubg.domain.GoodsVO">
 select gdsNum, gdsName, cateCode, gdsPrice, gdsStock, gdsDes, gdsImg, gdsDate
     from tbl_goods
         where gdsNum = #{gdsNum}
</select>

DAO와 Service를 작성합니다.

컨트롤러의 view 메서드에 코드를 추가합니다.

// 상품 조회
@RequestMapping(value = "/goods/view", method = RequestMethod.GET)
public void getGoodsview(@RequestParam("n") int gdsNum, Model model) throws Exception {
 logger.info("get goods view");
 
 GoodsVO goods = adminService.goodsView(gdsNum);
 
 model.addAttribute("goods", goods);
}

매개변수 @RequestParam("n") int gdsNum 는, URL주소에서 "n"의 값을 찾아서 int gdsNum에 전달합니다. 목록에서 링크 주소를 /admin/goods/view?n=[상품번호] 형식으로 했기 떄문에 n를 찾는것이며, 만약 다른 문자로 했다면 그 문자로 해야합니다.

view.jsp의 폼 <form> 태그를 수정합니다.

<form role="form" method="post" autocomplete="off">

<div class="inputArea"> 
 <label>1차 분류</label>
 <span class="category1"></span>        
 <label>2차 분류</label>
 <span class="category2">${goods.cateCode}</span>
</div>

<div class="inputArea">
 <label for="gdsName">상품명</label>
 <span>${goods.gdsName}</span>
</div>

<div class="inputArea">
 <label for="gdsPrice">상품가격</label>
 <span><fmt:formatNumber value="${goods.gdsPrice}" pattern="###,###,###"/></span>
</div>

<div class="inputArea">
 <label for="gdsStock">상품수량</label>
 <span>${goods.gdsStock}</span>
</div>

<div class="inputArea">
 <label for="gdsDes">상품소개</label>
 <span>${goods.gdsDes}</span>
</div>

<div class="inputArea">
 <button type="button" id="register_Btn" class="btn btn-warning">수정</button>
 <button type="button" id="register_Btn" class="btn btn-danger">삭제</button>
</div>

</form>

상품 가격은 포맷을 이용하였기 때문에, jsp파일 상단에 태그 라이브러리를 추가해야합니다.

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

이제 조회 화면으로 이동해보면, 번호에 맞는 상품이 잘 출력되고 있는걸 확인할 수 있습니다.

게시물 수정