스프링 쇼핑몰 만들기 #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>
이름부분이 링크처리되었지만, 아직 조회(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"%>
이제 조회 화면으로 이동해보면, 번호에 맞는 상품이 잘 출력되고 있는걸 확인할 수 있습니다.
댓글에 <a>, <b>, <i> 태그를 사용할 수 있습니다.
댓글에 HTML/Javascript를 입력해야할 경우, 반드시 HTML 태그 (부등호) 변환을 이용해 변환한 뒤 입력해주세요.
댓글로 작성하기 어렵거나, 첨부 파일이 있는 경우 메일(kuzuro@gmail.com)로 보내주세요.
블로그 정보 및 규칙은 블로그 어바웃에서 확인하실 수 있습니다.