- 핸들바 펑션을 이용해 판매중, 판매중지 여부를 about.jsp에 보여주도록 하겠다.
- about.jsp
<div id="products"></div>
<script id="temp" type="text/x-handlebars-template">
{{#each array}}
<div class="item">
<div class="imgbox">
<img src="/image/product/{{image}}" width=210/>
</div>
<div class="prod_id">{{prod_id}}</div>
<div class="prod_name">{{prod_name}}</div>
<div class="price">{{price}}</div>
<div class="cart{{prod_del}}">{{printDel prod_del}}</div>
</div>
{{/each}}
</script>
<script>
Handlebars.registerHelper("printDel", function(prod_del) {
if (prod_del == 0) {
return "장바구니 담기"
} else{
return "판매중지"
}
})
</script>
- prod_del 파라미터를 productDAO에서 가지고 올 수 있도록 하겠다.
- productDAO -> 1. 상품목록 출력 메서드
while (rs.next()) {
JSONObject obj = new JSONObject();
obj.put("image", rs.getString("image"));
obj.put("prod_id", rs.getString("prod_id"));
obj.put("prod_name", rs.getString("prod_name"));
obj.put("mall_name", rs.getString("mall_name"));
obj.put("company", rs.getString("company"));
DecimalFormat df = new DecimalFormat("#,###");
String price = df.format(rs.getInt("price1"));
obj.put("price", price);
obj.put("price2", df.format(rs.getInt("price2")));
obj.put("prod_del", rs.getString("prod_del")); // new
array.add(obj);
}
- 장바구니 담기, 판매중지 폰트에 CSS를 주고 장바구니 담기 버튼을 누르면 확인 얼럿이 뜨도록 하겠다.
.cart0{
color:blue;
font-weight: bold;
cursor: pointer;
}
.cart1{
color:red;
font-weight: bold;
}
<script>
var page = 1;
// 장바구니 담기 확인
$('#products').on('click','.item .cart0',function(){
if(!confirm("장바구니에 담으시겠습니까?")) return;
})
- 장바구니 목록 페이지를 만들도록 하겟다.
- main.jsp
<h4>
<a href="/purchase/list">주문목록</a>
</h4>
<h4>
<a href="/cart/list">장바구니</a>
</h4>
</div>
- create new controller\CartServlet.java
package controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value = { "/cart/list", "/cart/insert", "/cart/delete" })
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
switch (request.getServletPath()) {
case "/cart/list":
request.setAttribute("pageName", "/cart/list.jsp");
break;
}
RequestDispatcher dis = request.getRequestDispatcher("/main.jsp");
dis.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
- create new folder in webContent\cart
- create new cart\list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>장바구니</h1>
- 장바구니 담기 버튼을 눌렀을때 prod_id를 가지고 올 수 있도록 한다.
// 장바구니 담기 확인
$('#products').on('click','.item .cart0',function(){
var prod_id=$(this).parent().find(".prod_id").html();
if(!confirm(prod_id+"을(를) 장바구니에 담으시겠습니까?")) return;
})
- create new model\CartVO.java
package model;
public class CartVO {
private String prod_id;
private String prod_name;
private int quantity;
private int price;
- CartServlet.java
- 카트에 담기전에 어떤 상품인지 정보를 가지고 오는 작업을 하도록 하겠다.
ProductDAO pdao = new ProductDAO();
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
switch (request.getServletPath()) {
case "/cart/insert":
String prod_id = request.getParameter("prod_id");
ProductVO vo = pdao.read(prod_id);
System.out.println(vo.toString());
break;
}
}
- about.jsp
// 장바구니 담기 확인
$('#products').on('click','.item .cart0',function(){
var prod_id=$(this).parent().find(".prod_id").html();
if(!confirm(prod_id+"을(를) 장바구니에 담으시겠습니까?")) return;
$.ajax({
type:'post',
url:'/cart/insert',
data:{'prod_id':prod_id},
success:function(){
alert("장바구니에 담았습니다.");
}
})
})
- CartVO에 값을 담아서 출력해보도록 하겠다.
- CartServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
switch (request.getServletPath()) {
case "/cart/insert":
String prod_id = request.getParameter("prod_id");
ProductVO vo = pdao.read(prod_id);
CartVO cartVo = new CartVO();
cartVo.setProd_id(vo.getProd_id());
cartVo.setProd_name(vo.getProd_name());
cartVo.setPrice(vo.getPrice1());
System.out.println(cartVo.toString());
break;
}
}
- 장바구니에 insert한 상품을 세션에 담아보도록 하겠다.
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 장바구니 상품을 세션에 담아보자.
HttpSession session = request.getSession();
// 강제 형변환
ArrayList<CartVO> cartList = (ArrayList<CartVO>) session.getAttribute("cartList");
switch (request.getServletPath()) {
case "/cart/insert":
String prod_id = request.getParameter("prod_id");
ProductVO vo = pdao.read(prod_id);
// 원하는 값을 cartVo에 가지고 옴
CartVO cartVo = new CartVO();
cartVo.setProd_id(vo.getProd_id());
cartVo.setProd_name(vo.getProd_name());
cartVo.setPrice(vo.getPrice1());
cartVo.setQuantity(1);
if (cartList == null) {
cartList = new ArrayList<CartVO>();
}
cartList.add(cartVo);
session.setAttribute("cartList", cartList);
break;
}
}
- cart\list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<style>
table {
border-collapse: collapse;
margin: 0px auto;
margin-bottom: 10px;
}
th {
background: rgb(242, 242, 242);
color: black;
}
th, td {
border: 1px solid black;
padding: 10px;
}
</style>
<h1>장바구니</h1>
<table>
<tr>
<th width=50><input type="checkbox" /></th>
<th width=100>상품코드</th>
<th width=300>상품명</th>
<th width=100>단가</th>
<th width=100>수량</th>
<th width=100>합계</th>
<th width=50>삭제</th>
</tr>
<c:forEach items="${cartList }" var="vo">
<tr class="row">
<td style="text-align: center;"><input type="checkbox" /></td>
<td>${vo.prod_id}</td>
<td>${vo.prod_name}</td>
<td>${vo.price}</td>
<td>${vo.quantity}</td>
<td>${vo.price*vo.quantity}</td>
<td style="text-align: center;"><button>삭제</button></td>
</tr>
</c:forEach>
</table>
- 같은 상품이 담겨있을때 수량이 +1이 되도록 하겠다.
- CartServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 장바구니 상품을 세션에 담아보자.
HttpSession session = request.getSession();
// 강제 형변환
ArrayList<CartVO> cartList = (ArrayList<CartVO>) session.getAttribute("cartList");
switch (request.getServletPath()) {
case "/cart/insert":
String prod_id = request.getParameter("prod_id");
ProductVO vo = pdao.read(prod_id);
// 원하는 값을 cartVo에 가지고 옴
CartVO cartVo = new CartVO();
cartVo.setProd_id(vo.getProd_id());
cartVo.setProd_name(vo.getProd_name());
cartVo.setPrice(vo.getPrice1());
cartVo.setQuantity(1);
// new
boolean isFind = false;
if (cartList == null) {
cartList = new ArrayList<CartVO>();
} else {
for (CartVO v : cartList) {
// 카트에 동일한 상품이 있는 경우
if (cartVo.getProd_id().equals(v.getProd_id())) {
v.setQuantity(v.getQuantity() + 1);
isFind = true;
break;
}
}
}
// 카트에 동일한 상품이 없는 경우
if (!isFind) {
cartList.add(cartVo);
}
session.setAttribute("cartList", cartList);
break;
}
}
- 장바구니에 들어있는 상품의 총 가격을 출력해보도록 하겠다.
- CartServlet.java
// 카트에 있는 상품의 총가격
int total = 0;
for (CartVO v : cartList) {
total = total + (v.getQuantity() * v.getPrice());
session.setAttribute("total", total);
}
break;
}
}
- cart\list.jsp
- price, total, price*quantity 의 단위에 태그 라이브러리를 이용해서 포맷을 주도록 하겠다.
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%>
<h1>장바구니</h1>
<table id="tbl">
<tr class="title">
<th width=50><input type="checkbox" id="chkAll"/></th>
<th width=100>상품코드</th>
<th width=300>상품명</th>
<th width=100>단가</th>
<th width=100>수량</th>
<th width=100>합계</th>
<th width=50>삭제</th>
</tr>
<c:forEach items="${cartList }" var="vo">
<tr class="row">
<td style="text-align: center;"><input type="checkbox" class="chk"/></td>
<td>${vo.prod_id}</td>
<td>${vo.prod_name}</td>
<td><f:formatNumber pattern="#,###원" value="${vo.price}"></f:formatNumber></td>
<td>
<input id="quantity" value="${vo.quantity}" size=2/>
<button class="update">수정</button>
</td>
<td><f:formatNumber pattern="#,###원"
value="${vo.price*vo.quantity}"></f:formatNumber></td>
<td style="text-align: center;"><button class="delete">삭제</button></td>
</tr>
</c:forEach>
<tr>
<td class="title">합계</td>
<td colspan=6 style="text-align: right;"><f:formatNumber
pattern="#,###원" value="${total}"></f:formatNumber></td>
</tr>
</table>
- 이제 장바구니에 있는 수량 수정, 삭제의 기능을 추가해보도록 하겠다.
1. 수정
- cart\list.jsp
- 장바구니에 있는 상품코드와 수량을 알아야 수정할수 있다.
<td class="prod_id">${vo.prod_id}</td>
<input class="quantity" value="${vo.quantity}" size=2/>
<script>
//수량 수정버튼을 클릭한 경우
$('#tbl').on('click','.row .update',function(){
if(!confirm("수량을 수정하시겠습니까?")) return;
var prod_id = $(this).parent().parent().find(".prod_id").html();
var quantity = $(this).parent().find(".quantity").val();
alert(prod_id+"/"+quantity)
})
</script>
- 이제 ajax을 통해서 값을 전달하도록 하겠다.
- CartServlet.java
@WebServlet(value = { "/cart/update","/cart/list", "/cart/insert", "/cart/delete" })
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 장바구니 상품을 세션에 담아보자.
HttpSession session = request.getSession();
// 강제 형변환
ArrayList<CartVO> cartList = (ArrayList<CartVO>) session.getAttribute("cartList");
// 전역화
String prod_id = request.getParameter("prod_id");
switch (request.getServletPath()) {
case "/cart/update":
int quantity = Integer.parseInt(request.getParameter("quantity"));
for(CartVO v : cartList){
if(v.getProd_id().equals(prod_id)){
v.setQuantity(quantity);
break;
}
}
session.setAttribute("cartList", cartList);
break;
- cart\list.jsp
<script>
//수량 수정버튼을 클릭한 경우
$('#tbl').on('click', '.row .update', function() {
if (!confirm("수량을 수정하시겠습니까?"))
return;
var prod_id = $(this).parent().parent().find(".prod_id").html();
var quantity = $(this).parent().find(".quantity").val();
$.ajax({
type : 'post',
url : '/cart/update',
data : {
'prod_id' : prod_id,
'quantity' : quantity
},
success : function() {
alert("수량이 수정되었습니다.");
location.reload();
}
})
})
</script>
2. 삭제
- cart\list.jsp
// 장바구니 상품 삭제 버튼을 클릭한 경우
$('#tbl').on('click','.row .delete',function(){
var prod_id = $(this).parent().parent().find(".prod_id").html();
if(!confirm(prod_id+" 상품을 장바구니에서 삭제하시겠습니까?")) return;
})
- CartServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 장바구니 상품을 세션에 담아보자.
HttpSession session = request.getSession();
// 강제 형변환
ArrayList<CartVO> cartList = (ArrayList<CartVO>) session.getAttribute("cartList");
// 전역화
String prod_id = request.getParameter("prod_id");
switch (request.getServletPath()) {
case "/cart/delete":
for(int i=0; i<cartList.size();i++){
CartVO vo = cartList.get(i);
if(vo.getProd_id().equals(prod_id)){
cartList.remove(i);
break;
}
}
break;
- cart\list.jsp
// 장바구니 상품 삭제 버튼을 클릭한 경우
$('#tbl').on('click','.row .delete',function(){
var prod_id = $(this).parent().parent().find(".prod_id").html();
if(!confirm(prod_id+" 상품을 장바구니에서 삭제하시겠습니까?")) return;
$.ajax({
type : 'post',
url : '/cart/delete',
data : {
'prod_id' : prod_id
},
success : function() {
alert("상품이 삭제되었습니다.");
location.reload();
}
})
})
</script>
- 합계가 수정되도록 하겠다.
- CartServlet.java
// 카트에 있는 상품의 총가격
int total = 0;
for (CartVO v : cartList) {
total = total + (v.getQuantity() * v.getPrice());
}
session.setAttribute("total", total);
ㄴ total을 switch문 밖으로 빼면 된다.
- 장바구니에 상품이 있는경우 없는 경우
- cart\list.jsp
- #tbl을 다음으로 묶는다.
<c:if test="${cartList.size()>0}"> <!-- 장바구니에 상품이 있는경우 -->
<!-- #tbl -->
</c:if>
- 장바구니에 상품이 없을경우를 아래에 삽입한다.
<c:if test="${cartList.size()==0}">
<div><h3>장바구니가 비어있습니다.</h3></div>
</c:if>
- 장바구니에서 선택한 상품 과 전체선택한 상품을 주문하는 페이지에 넣는 작업을 하도록 하겠다.
- cart\list.jsp
- 전체상품주문, 선택상품주문 버튼을 만들겠다.
</table>
<div style="text-align: center;">
<button id="all">전체상품주문</button>
<button id="select">선택상품주문</button>
</div>
</c:if>
<script>
// chkAll 버튼을 클릭한 경우
$('#tbl').on('click', ".title #chkAll", function() {
if ($(this).is(':checked')) {
$('#tbl tr input:checkbox').each(function() {
$(this).prop('checked', true);
});
} else {
$('#tbl tr input:checkbox').each(function() {
$(this).prop('checked', false);
});
}
});
// 각행의 checkbox를 선택한 경우
$('#tbl').on('click','.row td .chk', function(){
var cntAll = $('#tbl .row td .chk').length; //첵박 개수
var cntChecked = $('#tbl .row td .chk:checked').length; //첵박체크 개수
if(cntAll==cntChecked){
$('#chkAll').prop('checked',true);
}else{
$('#chkAll').prop('checked',false);
};
});
- 전체상품주문을 클릭할 경우 주문정보가 보이도록 하겠다.
- cart\list.jsp
- 우선 장바구니 정보를 div#cartinfo에 넣는다.
<div id="cartinfo">
<h1>장바구니</h1>
....
<c:if test="${cartList.size()==0}">
<div>
<h3>장바구니가 비어있습니다.</h3>
</div>
</c:if>
</div>
- 같은 페이지에 주문정보란을 새로 만든다.
<div id="orderinfo">
<h1>주문정보</h1>
<table id="tblorder"></table>
<script id="temp" type="text/x-handlebars-template">
<tr class="class">
<td width=100>상품코드</td>
<td width=300>상품이름</td>
<td width=100>상품가격</td>
<td width=100>상품수량</td>
<td width=100>상품금액</td>
</tr>
{{#each .}}
<tr class="row">
<td>{{prod_id}}</td>
<td>{{prod_name}}</td>
<td>{{price}}</td>
<td>{{quantity}}</td>
<td>{{sum}}</td>
</tr>
{{/each}}
</script>
</div>
- 상품의 데이터를 배열에 담아서 주문정보에 데이터를 template으로 보내도록 하겠다.
- 가져올 데이터들의 class명을 지정한다.
<c:forEach items="${cartList }" var="vo">
<tr class="row">
<td style="text-align: center;"><input type="checkbox"
class="chk" /></td>
<td class="prod_id">${vo.prod_id}</td>
<td class="prod_name">${vo.prod_name}</td>
<td class="price"><f:formatNumber pattern="#,###원" value="${vo.price}"></f:formatNumber></td>
<td><input class="quantity" value="${vo.quantity}" size=2 />
<button class="update">수정</button></td>
<td class="sum"><f:formatNumber pattern="#,###원"
value="${vo.price*vo.quantity}"></f:formatNumber></td>
<td style="text-align: center;"><button class="delete">삭제</button></td>
</tr>
</c:forEach>
- 전체상품주문을 클릭할 경우
// 전체상품주문 클릭할 경우
$('#all').on('click', function() {
$('#orderinfo').show();
var array = [];
$('#tbl .row').each(function() {
var prod_id = $(this).find('.prod_id').html();
var prod_name = $(this).find('.prod_name').html();
var price = $(this).find('.price').html();
var quantity = $(this).find('.quantity').val();
var sum = $(this).find('.sum').html();
var data = {
"prod_id" : prod_id,
"prod_name" : prod_name,
"price" : price,
"quantity" : quantity,
"sum" : sum
}
array.push(data);
});
var temp = Handlebars.compile($("#temporder").html());
$("#tblorder").html(temp(array));
})
- 선택상품주문을 클릭할 경우
// 선택상품주문 클릭할 경우
$('#select').on('click', function() {
if ($('#tbl .row .chk:checked').length == 0) {
alert("주문할 상품을 선택하세요.");
return;
}
$('#orderinfo').show();
var array = [];
$('#tbl .row .chk:checked').each(function() {
var row = $(this).parent().parent();
var prod_id = row.find('.prod_id').html();
var prod_name = row.find('.prod_name').html();
var price = row.find('.price').html();
var quantity = row.find('.quantity').val();
var sum = row.find('.sum').html();
var data = {
"prod_id" : prod_id,
"prod_name" : prod_name,
"price" : price,
"quantity" : quantity,
"sum" : sum
}
array.push(data);
});
var temp = Handlebars.compile($("#temporder").html());
$("#tblorder").html(temp(array));
})
- array에 담겨있는 정보를 template를 이용해 넘긴다.
<div id="orderinfo">
<h1>주문정보</h1>
<table id="tblorder"></table>
<script id="temporder" type="text/x-handlebars-template">
<tr class="title">
<td width=150>상품코드</td>
<td width=300>상품이름</td>
<td width=150>상품가격</td>
<td width=150>상품수량</td>
<td width=150>상품금액</td>
</tr>
{{#each .}}
<tr class="row">
<td>{{prod_id}}</td>
<td>{{prod_name}}</td>
<td>{{price}}</td>
<td>{{quantity}}</td>
<td>{{sum}}</td>
</tr>
{{/each}}
</script>
</div>
- 주문정보 하단에 주문자 정보 테이블을 만든다.
<div id="orderinfo">
<h1>주문정보</h1>
<!-- ... -->
<!-- 주문자 정보 -->
<table id="tblinfo">
<tr>
<td class="title" width=100>주문자 성명</td>
<td width=850><input id="name" size=10 /></td>
</tr>
<tr>
<td class="title" width=100>배송지 주소</td>
<td><input id="address" size=50 /></td>
</tr>
<tr>
<td class="title" width=100>이메일 주소</td>
<td><input id="email" size=10 /></td>
</tr>
<tr>
<td class="title" width=100>전화번호</td>
<td><input id="tel" size=10 /></td>
</tr>
<tr>
<td class="title" width=100>결제방법</td>
<td><input type="radio" name="payType" value="0" />무통장 <input
type="radio" name="payType" value="1" checked />카드</td>
</tr>
</table>
<div style="margin-top: 20px; text-align: center;">
<input type="submit" value="주문하기" />
</div>
</div>
- 신규 주문번호를 생성하는 메서드를 만들겠다.
- model\PurchaseDAO.java
// 5. 주문번호 생성 메서드
public String getID() {
String prod_id = "";
try {
String sql = "select max(order_id) from purchase";
PreparedStatement ps = Database.CON.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next()){
String maxID=rs.getString("max(order_id)");
maxID = maxID.substring(1);
prod_id="R"+(Integer.parseInt(maxID)+1);
}
} catch (Exception e) {
System.out.println("PurchaseDAO getID : "+e.toString());
}
return prod_id;
}
- controller\PurchaseRESTServlet.java
@WebServlet(value = { "/getID", "/update_status", "/purchase_read.json", "/purchase.json", "/purchase_product.json" })
public class PurchaseRESTServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
ProductDAO dao = new ProductDAO();
PurchaseDAO pdao = new PurchaseDAO();
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
switch (request.getServletPath()) { // new
case "/getID":
out.println(pdao.getID());
break;
- CartServlet에서 /car/list path를 통해서 위의 값을 보내도록 하겠다.
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
switch (request.getServletPath()) {
case "/cart/list":
PurchaseDAO purdao = new PurchaseDAO();
request.setAttribute("order_id", purdao.getID()); // new
request.setAttribute("pageName", "/cart/list.jsp");
break;
}
RequestDispatcher dis = request.getRequestDispatcher("/main.jsp");
dis.forward(request, response);
}
- cart\list.jsp
<!-- 주문자 정보 -->
<table id="tblinfo">
<tr>
<td class="title" width=100>주문자 성명</td>
<td width=850><input id="name" size=100 value="${order_id}"/></td>
</tr>
<script>
$('#orderinfo').hide();
// 주문하기 버튼을 클릭할 경우
$(frm).on('submit', function(e) {
e.preventDefault();
if (!confirm("상품을 주문하시겠습니까?"))
return;
})
- DAO에 데이터를 넘길 PurchaseVO를 만든다.
- create new model\PurchseVO.java
package model;
public class PurchaseVO {
private String order_id;
private String name;
private String address;
private String email;
private String tel;
private String pdate;
private String payType;
private String status;
- 주문정보를 DB purchase table에 입력하는 메서드를 만들겠다.
- PurchaseDAO.java
// 6. 주문정보 DB purchase 입력 메서드
public void insert(PurchaseVO vo) {
try {
String sql = "insert into purchase(order_id,name,address,email,tel,pdate,status,payType) values(?,?,?,?,?,now(),?,?)";
PreparedStatement ps = Database.CON.prepareStatement(sql);
ps.setString(1, vo.getOrder_id());
ps.setString(2, vo.getName());
ps.setString(3, vo.getAddress());
ps.setString(4, vo.getEmail());
ps.setString(5, vo.getTel());
ps.setString(6, vo.getStatus());
ps.setString(7, vo.getPayType());
ps.execute();
} catch (Exception e) {
System.out.println("PurchaseDAO insert : " + e.toString());
}
}
- DAO에 데이터를 넘길 OrderVO를 만든다.
- create new model\OrderVO.java
package model;
public class OrderVO {
private String order_id;
private String prod_id;
private int price;
private int quantity;
- 주문상품 DB order 입력 메서드를 생성한다.
- PurchaseDAO.java
// 7. 주문상품 DB order 입력 메서드
public void insertOrders(OrderVO vo) {
try {
String sql = "insert into orders(order_id,prod_id,price,quantity) values(?,?,?,?)";
PreparedStatement ps = Database.CON.prepareStatement(sql);
ps.setString(1, vo.getOrder_id());
ps.setString(2, vo.getProd_id());
ps.setInt(3, vo.getPrice());
ps.setInt(4, vo.getQuantity());
ps.execute();
} catch (Exception e) {
System.out.println("PurchaseDAO insertOrders : " + e.toString());
}
}
- PurchaseRESTServlet에서
@WebServlet(value = { "/purchase/orders", "/purchase/insert", "/getID", "/update_status", "/purchase_read.json",
"/purchase.json", "/purchase_product.json" })
- 우선 값들이 제대로 가지고 오는지 확인해주기 위해서 콘솔에 출력해본다.
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
PurchaseVO vo = new PurchaseVO();
switch (request.getServletPath()) {
case "/purchase/insert":
vo.setOrder_id(request.getParameter("order_id"));
vo.setName(request.getParameter("name"));
vo.setAddress(request.getParameter("address"));
vo.setEmail(request.getParameter("email"));
vo.setTel(request.getParameter("tel"));
vo.setPayType(request.getParameter("payType"));
vo.setStatus(request.getParameter("status"));
System.out.println(vo.toString());
// pdao.insert(vo);
break;
case "/purchase/orders":
OrderVO ovo = new OrderVO();
ovo.setOrder_id(request.getParameter("order_id"));
ovo.setProd_id(request.getParameter("prod_id"));
ovo.setPrice(Integer.parseInt(request.getParameter("order_id")));
ovo.setQuantity(Integer.parseInt(request.getParameter("quantity")));
System.out.println(ovo.toString());
// pdao.insertOrders(ovo);
break;
}
}
- cart\list.jsp
- 아래부분 수정
<!-- 주문자 정보 -->
<form name="frm">
<table id="tblinfo">
<tr> <!-- 확인 -->
<td class="title" width=100>주문번호</td>
<td width=850><input name="order_id" size=100
value="${order_id}" /></td>
</tr>
<tr>
<td class="title" width=100>주문자 성명</td>
<td><input name="name" size=100 /></td> <!-- 확인 -->
</tr>
<tr>
<td class="title" width=100>배송지 주소</td>
<td><input name="address" size=100 /></td> <!-- 확인 -->
</tr>
<tr>
<td class="title" width=100>이메일 주소</td>
<td><input name="email" size=100 /></td> <!-- 확인 -->
</tr>
<tr>
<td class="title" width=100>전화번호</td>
<td><input name="tel" size=100 /></td> <!-- 확인 -->
</tr>
<tr> <!-- 확인 -->
<td class="title" width=100>결제방법</td>
<td><input type="radio" name="payType" value="0" />무통장 <input
type="radio" name="payType" value="1" />카드</td>
</tr>
</table>
<div style="margin-top: 20px; text-align: center;">
<input type="submit" value="주문하기" />
</div>
</form>
// 주문하기 버튼을 클릭할 경우
$(frm).on('submit', function(e) {
e.preventDefault();
if (!confirm("상품을 주문하시겠습니까?"))
return;
var order_id = $(frm.order_id).val();
var name = $(frm.name).val();
var address = $(frm.address).val();
var tel = $(frm.tel).val();
var payType = $("input[name='payType']:checked").val();
var email = $(frm.email).val();
$.ajax({
type : 'post',
url : '/purchase/insert',
data : {
"order_id" : order_id,
"name" : name,
"address" : address,
"tel" : tel,
"payType" : payType,
"email" : email
},
success : function() {
alert("주문되었습니다.");
}
})
})
- #tblorder의 값을 가지고 오기 위해 각 td에 class name을 지정해준다.
<div id="orderinfo">
<h1>주문정보</h1>
<table id="tblorder"></table>
<script id="temporder" type="text/x-handlebars-template">
<tr class="title">
<td width=150>상품코드</td>
<td width=300>상품이름</td>
<td width=150>상품가격</td>
<td width=150>상품수량</td>
<td width=150>상품금액</td>
</tr>
{{#each .}}
<tr class="row">
<td class="prod_id">{{prod_id}}</td>
<td class="prod_name">{{prod_name}}</td>
<td class="price">{{price}}</td>
<td class="quantity">{{quantity}}</td>
<td class="sum">{{sum}}</td>
</tr>
{{/each}}
</script>
// 주문하기 버튼을 클릭할 경우
$(frm).on('submit', function(e) {
e.preventDefault();
if (!confirm("상품을 주문하시겠습니까?"))
return;
var order_id = $(frm.order_id).val();
var name = $(frm.name).val();
var address = $(frm.address).val();
var tel = $(frm.tel).val();
var payType = $("input[name='payType']:checked").val();
var email = $(frm.email).val();
$.ajax({
type : 'post',
url : '/purchase/insert',
data : {
"order_id" : order_id,
"name" : name,
"address" : address,
"tel" : tel,
"payType" : payType,
"email" : email
},
success : function() { // 이하 new
$('#tblorder .row').each(function() {
var prod_id = $(this).find(".prod_id").html();
var price = $(this).find(".price").html();
var price = price.replaceAll(",", "");
var quantity = $(this).find(".quantity").html();
$.ajax({
type : 'post',
url : '/purchase/orders',
data : {
"order_id" : order_id,
"prod_id" : prod_id,
"price" : price,
"quantity" : quantity
},
success : function() {
}
})
})
// 해당 위치로 이동해줘야 여러번 되묻지 않는다.
alert("주문되었습니다.")
if (confirm("주문목록으로 이동하시겠습니까?")) {
location.href = "/purchase/list";
} else {
return;
}
}
})
})
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
PurchaseVO vo = new PurchaseVO();
switch (request.getServletPath()) {
case "/purchase/insert":
vo.setOrder_id(request.getParameter("order_id"));
vo.setName(request.getParameter("name"));
vo.setAddress(request.getParameter("address"));
vo.setEmail(request.getParameter("email"));
vo.setTel(request.getParameter("tel"));
vo.setPayType(request.getParameter("payType"));
vo.setStatus(request.getParameter("status"));
pdao.insert(vo); // new
break;
case "/purchase/orders":
OrderVO ovo = new OrderVO();
ovo.setOrder_id(request.getParameter("order_id"));
ovo.setProd_id(request.getParameter("prod_id"));
ovo.setPrice(Integer.parseInt(request.getParameter("price")));
ovo.setQuantity(Integer.parseInt(request.getParameter("quantity")));
pdao.insertOrders(ovo); // new
break;
}
}
'ICIA 수업일지' 카테고리의 다른 글
2021.09.09 수업일지(간이발표, VSC, React) (0) | 2021.09.09 |
---|---|
2021.09.08 수업일지(Spring, Servlet, JSTL) (0) | 2021.09.08 |
2021.09.06 수업일지(Mysql, Servlet, JSTL) (0) | 2021.09.06 |
2021.09.03 수업일지 (Servlet, Spring, MySQL, Template) (0) | 2021.09.03 |
2021.09.02 수업일지(Mysql, Servlet, pl/sql) (0) | 2021.09.02 |