Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-05-17(화) 076일차 [Oracle, Spring Framework, Mybatis Framework] 서브쿼리, 상품 상세 페이지 만들기

옌炎 2022. 6. 17. 19:19
728x90

수업내용


1교시 (09:30-10:20)

  • JOIN
SELECT A.*
FROM    DEPT A
       ,(SELECT DEPTNO FROM EMP WHERE ENAME='SMITH') B
    WHERE A.DEPTNO = B.DEPTNO;

-- SCOTT과 동일한 부서에 근무하는 사원의 이름, 부서번호를 조회하시오
SELECT *
FROM EMP
WHERE ENAME = 'SCOTT';

SELECT ENAME, DEPTNO
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME='SMITH');

-- SCOTT과 동일한 부서에 근무하는 사원의 이름, 부서명, 부서번호를 조회하시오

SELECT A.ENAME, B.DNAME, B.DEPTNO
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
AND B.DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'SCOTT');

2교시 (10:30-11:20)

  • JOIN
-- 최대급여를 받는 사원의 이름, 담당업무, 급여를 조회하시오
SELECT A.ENAME, A.JOB, A.SAL
FROM EMP A
WHERE A.SAL = (SELECT MAX(SAL) FROM EMP);

SELECT A.ENAME, A.JOB, A.SAL
FROM EMP A
WHERE A.SAL = (SELECT MIN(SAL) FROM EMP);

SELECT A.ENAME, A.JOB, A.SAL
FROM EMP A
WHERE A.SAL >= (SELECT AVG(SAL) FROM EMP);

SELECT A.ENAME, A.JOB, A.SAL
FROM EMP A
WHERE A.SAL <= (SELECT AVG(SAL) FROM EMP);

SELECT A.ENAME, A.JOB, A.SAL
FROM EMP A
WHERE A.SAL <= (SELECT CEIL(AVG(SAL)) FROM EMP);

SELECT A.ENAME, A.JOB, A.SAL
FROM EMP A
WHERE A.SAL <= (SELECT ROUND(AVG(SAL)) FROM EMP);

SELECT A.ENAME, A.JOB, A.SAL
FROM EMP A
WHERE A.SAL <= (SELECT FLOOR(AVG(SAL)) FROM EMP);


-- 30번 부서에서 최저 급여를 받는 사람은?
SELECT A.ENAME
FROM EMP A
WHERE A.SAL = (SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 30);

-- 부서 별 최저 급여를 조회하시오
SELECT A.DEPTNO, MIN(A.SAL)
FROM EMP A
GROUP BY A.DEPTNO;

SELECT A.DEPTNO, MIN(A.SAL)
FROM EMP A
GROUP BY A.DEPTNO
HAVING DEPTNO = 30;

SELECT ENAME FROM EMP
WHERE SAL = (
        SELECT MIN(A.SAL)
        FROM EMP A
        GROUP BY A.DEPTNO
        HAVING DEPTNO = 30);

3교시 (11:30-12:20)

  • 카트 만들기 및 카트에 상품 넣기 기능에 대한 설명

4교시 (12:30-13:20)

상품 상세 페이지 만들기

  • spring_chabun.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
          
<mapper namespace="a.b.c.com.kosmo.common.dao.SpringChabunDAO">

<select id="getProductChabun" resultType="kosmoproductvo">
	SELECT /*+ INDEX_DESC(A SYS_C0012888) */ NVL(MAX(SUBSTR(A.KPNUM, -4)), 0) + 1  KPNUM FROM KOSMO_PRODUCT A
</select>

</mapper>
  • mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
		  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<typeAliases>
		<typeAlias type="a.b.c.com.kosmo.product.vo.KosmoProductVO" alias="kosmoproductvo"/>
		<typeAlias type="a.b.c.com.kosmo.cart.vo.KosmoCartVO" alias="kosmocartvo" />
	</typeAliases>
</configuration>
  • spring_product.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
          
<mapper namespace="a.b.c.com.kosmo.product.dao.KosmoProductDAO">

<insert id="kosmoProductInsert" parameterType="kosmoproductvo" >
	
	INSERT INTO KOSMO_PRODUCT (	KPNUM
							   ,KPID
							   ,KPNAME
							   ,KPCOMPANY
							   ,KPFILE
							   ,KPCNT
							   ,KPPRICE
							   ,KPDESC
							   ,DELETEYN
							   ,INSERTDATE
							   ,UPDATEDATE)
            			VALUES( #{kpnum}
							   ,#{kpid}
							   ,#{kpname}
							   ,#{kpcompany}
							   ,#{kpfile}
							   ,#{kpcnt}
							   ,#{kpprice}
							   ,#{kpdesc}
							   ,'Y'
							   ,SYSDATE
							   ,SYSDATE)
</insert>

<select id="kosmoProductSelectAll" parameterType="kosmoproductvo" resultType="kosmoproductvo">

	SELECT * FROM (
		SELECT  A.KPNUM		KPNUM
			   ,A.KPID		KPID
			   ,A.KPNAME	KPNAME
			   ,A.KPCOMPANY	KPCOMPANY
			   ,A.KPFILE	KPFILE
			   ,A.KPCNT		KPCNT
			   ,A.KPPRICE	KPPRICE
			   ,A.KPDESC	KPDESC
			   ,A.DELETEYN	DELETEYN
			   ,TO_CHAR(A.INSERTDATE, 'YYYY-MM-DD') INSERTDATE
			   ,TO_CHAR(A.UPDATEDATE, 'YYYY-MM-DD') UPDATEDATE
			   <!-- ? : 페이지 사이즈 : pageSize -->
			   ,CEIL(ROW_NUMBER() OVER(ORDER BY A.KPNUM) / #{pageSize} ) pageSize
			   ,COUNT(A.KPNUM) OVER() AS totalCount
		FROM	KOSMO_PRODUCT A
		WHERE 	A.DELETEYN = 'Y'
		<!-- ? : 현재 페이지 : curPage -->
	) WHERE pageSize = #{curPage}
</select>

<select id="kosmoProductSelect" parameterType="kosmoproductvo" resultType="kosmoproductvo">	
	
		SELECT 	A.KPNUM 	KPNUM
		       ,A.KPID KPID
		       ,A.KPNAME 	KPNAME
		       ,A.KPCOMPANY KPCOMPANY
		       ,A.KPFILE 	KPFILE
		       ,A.KPCNT 	KPCNT
		       ,A.KPPRICE 	KPPRICE
		       ,A.KPDESC 	KPDESC
		       ,A.DELETEYN 	DELETEYN
		       ,TO_CHAR(A.INSERTDATE, 'YYYY-MM-DD') INSERTDATE
		       ,TO_CHAR(A.UPDATEDATE, 'YYYY-MM-DD') UPDATEDATE	  
		FROM 	KOSMO_PRODUCT A
		WHERE 	A.DELETEYN = 'Y' 
		AND     A.KPNUM = #{kpnum}	
</select>
</mapper>

5교시 (14:30-15:20)

상품 상세 페이지 만들기

  • NumUtil.java
package a.b.c.com.kosmo.common;

import java.text.DecimalFormat;

public class NumUtil {
	
	public static String comma(String s) {	
		int iS = Integer.parseInt(s);
		return new DecimalFormat("###,###").format(iS);
	}
	
	public static String comma_replace(String s) {
		int iS = Integer.parseInt(s);
		return new DecimalFormat("###,###").format(iS);
	}
		
	public static void main(String args[]) {		
		System.out.println(NumUtil.comma("5000"));
	}
	
}
  • KosmoProductDAO.java
package a.b.c.com.kosmo.product.dao;

import java.util.List;

import a.b.c.com.kosmo.product.vo.KosmoProductVO;

public interface KosmoProductDAO {

	public int kosmoProductInsert(KosmoProductVO kpvo);
	public List<KosmoProductVO> kosmoProductSelectAll(KosmoProductVO kpvo);
	public List<KosmoProductVO> kosmoProductSelect(KosmoProductVO kpvo);
}
  • KosmoProductDAOImpl.java
package a.b.c.com.kosmo.product.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import a.b.c.com.kosmo.product.vo.KosmoProductVO;

@Repository
public class KosmoProductDAOImpl implements KosmoProductDAO {
	
	Logger logger = LogManager.getLogger(KosmoProductDAOImpl.class);
	
	@Autowired(required=false)
	private SqlSession sqlSession;
	
	@Override
	public int kosmoProductInsert(KosmoProductVO kpvo) {
		// TODO Auto-generated method stub
		
		logger.info("KosmoProductDAOImpl kosmoProductInsert 함수 진입 >>> : ");
		
		return (Integer)sqlSession.insert("kosmoProductInsert", kpvo);
	}

	@Override
	public List<KosmoProductVO> kosmoProductSelectAll(KosmoProductVO kpvo) {
		// TODO Auto-generated method stub
		
		logger.info("KosmoProductDAOImpl kosmoProductSelectAll 함수 진입 >>> : ");
		
		return sqlSession.selectList("kosmoProductSelectAll", kpvo);
	}
	
	@Override
	public List<KosmoProductVO> kosmoProductSelect(KosmoProductVO kpvo) {
		// TODO Auto-generated method stub
		
		logger.info("KosmoProductDAOImpl kosmoProductSelect 함수 진입 >>> : ");	
		
		return sqlSession.selectList("kosmoProductSelect", kpvo);
	}
}

6교시 (15:30-16:20)

상품 상세 페이지 만들기

  • KosmoProductService.java
package a.b.c.com.kosmo.product.service;

import java.util.List;

import a.b.c.com.kosmo.product.vo.KosmoProductVO;

public interface KosmoProductService {

	public int kosmoProductInsert(KosmoProductVO kpvo);
	public List<KosmoProductVO> kosmoProductSelectAll(KosmoProductVO kpvo);
	public List<KosmoProductVO> kosmoProductSelect(KosmoProductVO kpvo);
}
  • KosmoProductServiceimpl.java
package a.b.c.com.kosmo.product.service;

import java.util.List;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import a.b.c.com.kosmo.product.vo.KosmoProductVO;
import a.b.c.com.kosmo.product.dao.KosmoProductDAO;

@Service
@Transactional
public class KosmoProductServiceImpl implements KosmoProductService {

	Logger logger = LogManager.getLogger(KosmoProductServiceImpl.class);
	
	// 서비스에서 DAO 연결하기
	// 필드 @Autowired 어노테이션으로 DI (의존성 주입하기)
	@Autowired(required=false)
	private KosmoProductDAO kosmoProductDAO;
	
	@Override
	public int kosmoProductInsert(KosmoProductVO kpvo) {
		// TODO Auto-generated method stub
		
		logger.info("KosmoProductServiceImpl kosmoProductInsert 함수 진입 >>> : ");
		
		return kosmoProductDAO.kosmoProductInsert(kpvo);
	}

	@Override
	public List<KosmoProductVO> kosmoProductSelectAll(KosmoProductVO kpvo) {
		// TODO Auto-generated method stub
		
		logger.info("KosmoProductServiceImpl kosmoProductSelectAll 함수 진입 >>> : ");
		
		return kosmoProductDAO.kosmoProductSelectAll(kpvo);
	}
	
	@Override
	public List<KosmoProductVO> kosmoProductSelect(KosmoProductVO kpvo) {
		// TODO Auto-generated method stub
		
		logger.info("KosmoProductServiceImpl kosmoProductSelect 함수 진입 >>> : ");			
		
		return kosmoProductDAO.kosmoProductSelect(kpvo);
	}
}
  • KosmoProductController.java
package a.b.c.com.kosmo.product.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import a.b.c.com.kosmo.common.ChabunUtil;
import a.b.c.com.kosmo.common.CommonUtils;
import a.b.c.com.kosmo.common.FileUploadUtil;
import a.b.c.com.kosmo.common.service.SpringChabunService;
import a.b.c.com.kosmo.product.service.KosmoProductService;
import a.b.c.com.kosmo.product.vo.KosmoProductVO;

@Controller
public class KosmoProductController {
	
	Logger logger = LogManager.getLogger(KosmoProductController.class);
	
	// 필드 오토와이어드
	@Autowired(required=false)
	private SpringChabunService springChabunService;
	
	// 필드 오토와이어드
	@Autowired(required=false)
	private KosmoProductService kosmoProductService;
	
	// 상품 입력 폼
	@RequestMapping(value="kosmoProductInsertForm", method=RequestMethod.GET)
	public String kosmoProductInsertForm() {
		logger.info("KosmoProductController kosmoProductInsertForm 함수 진입 >>> : ");
		return "product/kosmoProductInsertForm";
	}
	
	// 상품 입력
	@RequestMapping(value="kosmoProductInsert", method=RequestMethod.POST)
	public String kosmoProductInsert(HttpServletRequest req) {
		logger.info("KosmoProductController kosmoProductInsert 함수 진입 >>> ");
		
		// 채번 구하기
		String kpnum = ChabunUtil.getProductChabun("D", springChabunService.getProductChabun().getKpnum());
		logger.info("KosmoProductController kosmoProductInsertForm kpnum >>> : " + kpnum);
		
		// 이미지 업로드
		FileUploadUtil fu = new FileUploadUtil(  CommonUtils.PRODUCT_IMG_UPLOAD_PATH
												,CommonUtils.PRODUCT_IMG_FILE_SIZE
												,CommonUtils.PRODUCT_EN_CODE);
		
		// 이미지 파일 원본 사이즈
		boolean bool = fu.imgfileUpload(req);
		// 이미지 파일 원본 사이즈 크기 조절 하기
		// boolean bool = fu.imgfileUploadSize(req);
		logger.info("KosmoProductController kosmoProductInsert bool >>> : " + bool);
		
		KosmoProductVO _kpvo = null;
		_kpvo = new KosmoProductVO();
		
		_kpvo.setKpnum(kpnum);
		_kpvo.setKpid(fu.getParameter("kpid"));
		_kpvo.setKpname(fu.getParameter("kpname"));
		_kpvo.setKpcompany(fu.getParameter("kpcompany"));
		
		_kpvo.setKpfile(fu.getFileName("kpfile"));
		
		_kpvo.setKpcnt(fu.getParameter("kpcnt"));
		_kpvo.setKpprice(fu.getParameter("kpprice"));
		_kpvo.setKpdesc(fu.getParameter("kpdesc"));
		
		int nCnt = kosmoProductService.kosmoProductInsert(_kpvo);
		logger.info("KosmoProductController kosmoProductInsert nCnt >>> : " + nCnt);
		
		if (nCnt > 0) { return "product/kosmoProductInsert"; }
		return "product/kosmoProductInsertForm";
	}
	
	// 상품 목록 페이징 조회
	@RequestMapping(value="kosmoProductSelectAll", method=RequestMethod.GET)
	public String kosmoProductSelectAll(KosmoProductVO kpvo, Model model) {
		logger.info("KosmoProductController kosmoProductSelectAll 함수 진입 >>> : ");
		
		// 페이징 처리 ===================================================
		int pageSize = CommonUtils.PRODUCT_PAGE_SIZE;
		int groupSize = CommonUtils.PRODUCT_GROUP_SIZE;
		int curPage = CommonUtils.PRODUCT_CUR_PAGE;
		int totalCount = CommonUtils.PRODUCT_TOTAL_COUNT;
		
		if (kpvo.getCurPage() != null) {
			curPage = Integer.parseInt(kpvo.getCurPage());
		}
		
		kpvo.setPageSize(String.valueOf(pageSize));
		kpvo.setGroupSize(String.valueOf(groupSize));
		kpvo.setCurPage(String.valueOf(curPage));
		kpvo.setTotalCount(String.valueOf(totalCount));
		
		logger.info("KosmoProductController kosmoProductSelectAll kpvo.getPageSize() >>> : " + kpvo.getPageSize());
		logger.info("KosmoProductController kosmoProductSelectAll kpvo.getGroupSize() >>> : " + kpvo.getGroupSize());
		logger.info("KosmoProductController kosmoProductSelectAll kpvo.getCurPage() >>> : " + kpvo.getCurPage());
		logger.info("KosmoProductController kosmoProductSelectAll kpvo.getTotalCount() >>> : " + kpvo.getTotalCount());
		// 페이징 처리 ===================================================
		
		// 서비스 호출
		List<KosmoProductVO> listAll = kosmoProductService.kosmoProductSelectAll(kpvo);
		if (listAll.size() > 0) {
			logger.info("KosmoProductController kosmoProductSelectAll listAll.size() >>> : " + listAll.size());
			
			model.addAttribute("pagingKPVO", kpvo);
			model.addAttribute("listAll", listAll);
			return "product/kosmoProductSelectAll";
		}
		return "product/kosmoProductInsertForm";
	}
	
	// 상품 조회
	@RequestMapping(value="kosmoProductSelect", method=RequestMethod.GET)
	public String kosmoProductSelect(KosmoProductVO kpvo, Model model) {
		logger.info("KosmoProductController kosmoProductSelect 함수 진입 >>> : ");
		
		// 상품번호 확인해보기
		logger.info("KosmoProductController kosmoProductSelect 함수 진입::: kpvo.getKpnum() >>> : " + kpvo.getKpnum());
		
		// 서비스 호출
		List<KosmoProductVO> listS = kosmoProductService.kosmoProductSelect(kpvo);		
		if (listS.size() > 0) { 
			logger.info("KosmoProductController kosmoProductSelectAll listS.size() >>> : " + listS.size());		
			model.addAttribute("listS", listS);
			return "product/kosmoProductSelect";
		}		
		return "product/kosmoProductSelectAll";
	}
}

7교시 (16:30-17:20)

상품 상세 페이지 만들기

  • kosmoProductSelectAll.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="a.b.c.com.kosmo.product.vo.KosmoProductVO" %> 
<%@ page import="java.util.List" %>  

<%@ page import="a.b.c.com.kosmo.common.NumUtil" %>

<% request.setCharacterEncoding("UTF-8");%> 
<%

	//페이징 변수 세팅
	int pageSize = 0;
	int groupSize = 0;
	int curPage = 0;
	int totalCount = 0;

	Object objPaging = request.getAttribute("pagingKPVO");
	KosmoProductVO pagingKPVO = (KosmoProductVO)objPaging;
	
	Object obj = request.getAttribute("listAll");
	List<KosmoProductVO> list = (List<KosmoProductVO>)obj;
	
	int nCnt = list.size();
	System.out.println("nCnt >>> : " + nCnt);	
%>


<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<script type="text/javascript" src="/kosmoSpring/js/common.js"></script>
	<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
	<script type="text/javascript">
	
		$(document).ready(function(){
			
			
		});	
	
	</script>
	<style type="text/css">
	
		th {
			text-align: center;
		}
	</style>
</head>
<body>
	<h3 align="center">상품목록</h3>
	<hr>
	<form name="productList" id="productList">
		<table border="1" align="center">
			<thead>
			<tr>
				<th>사진</td>
				<th>내용</td>
				<th>가격</td>	
			</tr>
			</thead>
			<%
			String kpnum = "";
			String kpprice = "";
			for (int i=0; i<nCnt; i++) {		
				KosmoProductVO _kpvo = list.get(i);		
				kpnum = _kpvo.getKpnum();
				kpprice = _kpvo.getKpprice();
				kpprice = NumUtil.comma(kpprice);
				
				// 페이징 세팅
				pageSize = Integer.parseInt(pagingKPVO.getPageSize());
				groupSize = Integer.parseInt(pagingKPVO.getGroupSize());
				curPage = Integer.parseInt(pagingKPVO.getCurPage());
				totalCount = Integer.parseInt(_kpvo.getTotalCount());
			%>
			<tbody>
			<tr>
				<td rowspan="5" align="center" style="width:100px;">
					<img src="/kosmoSpring/fileupload/product/<%= _kpvo.getKpfile() %>" width="50" height="50" 
						onclick="location.href='kosmoProductSelect.k?kpnum=<%= kpnum %>'"><br>
					<%= _kpvo.getKpid() %>
				</td>
				<td align="left" style="width:300px;">상품번호 : <%= kpnum %></td>
				
				<td rowspan="5" align="center" vertical-align="middle" style="width:150px;">
					
					<%= kpprice %>&nbsp;&nbsp;
					
					<a href="kosmoProductSelect.k?kpnum=<%= kpnum %>">
						<img src="/kosmoSpring/img/img_mandu/ase.gif" width="25" height="25" alt="image">
					</a>
				</td>
			</tr>
			<tr>
				<td>상품이름 : <%= _kpvo.getKpname() %></td>
			</tr>
			<tr>
				<td>상품설명 : <%= _kpvo.getKpdesc() %></td>
			</tr>
			<tr>
				<td>제조사 : <%= _kpvo.getKpcompany() %></td>
			</tr>
			<tr>
				<td>상품 등록일 : <%= _kpvo.getInsertdate() %></td>
			</tr>
			<%
			} //end of for
			%>	
			</tbody>
			<tfoot>
			<tr>
			<td colspan="3">
			<jsp:include page="productPaging.jsp" flush="true">
				<jsp:param name="url" value="kosmoProductSelectAll.k"/>
				<jsp:param name="str" value=""/>
				<jsp:param name="pageSize" value="<%=pageSize%>"/>
				<jsp:param name="groupSize" value="<%=groupSize%>"/>
				<jsp:param name="curPage" value="<%=curPage%>"/>
				<jsp:param name="totalCount" value="<%=totalCount%>"/>
			</jsp:include>
			</td>
			</tr>							
			</tfoot>			
		</table>
	</form>	
</body>
</html>
  • kosmoProductSelect.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="a.b.c.com.kosmo.product.vo.KosmoProductVO" %>
<%@ page import="java.util.List" %>

<% request.setCharacterEncoding("UTF-8"); %>
<%
	Object obj = request.getAttribute("listS");
	List<KosmoProductVO> list = (List)obj;
	
	String kpprice = "";
	KosmoProductVO _kpvo = null;
	if (list.size() == 1) {
		_kpvo = list.get(0);
		kpprice = _kpvo.getKpprice();
	}
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<script type="text/javascript" src="/kosmoSpring/js/common.js"></script>
	<script src="http://code.jquery.com/jquery-1.12.4.js"></script>
	<script type="text/javascript">
	
		$(document).ready(function(){
		
			$(function(){
					
				// 경매 끝나는 시간 
				const action_end_time = 2000;
				// 현재 시간 
				const current_time = 1100;
				// 경매 남은 시간
				var time = action_end_time - current_time;			
				var min = "";
				var sec = "";
				
				// setInterval('', 천분에일초);
				// setInterval(function(), 1000); // 1초에 한번씩 invoke(호출) 하시오
				var x = setInterval(function(){
					min = parseInt(time / 60);
					hour = parseInt(min / 60);				
					sec = time % 60;
					min = min % 60;
	
					document.getElementById("time").innerHTML = hour + "시" + min + "분" + sec + "초"; 
					time--;
					
					if (time < 0){
						clearInterval(x)
						document.getElementById("time").innerHTML = "시간초과";
					}
					
				}, 1000);
			});
			
			let kpprice = '<%= kpprice %>';
			kpprice = comma(kpprice);
			console.log(kpprice);
			$('#kpprice').val(kpprice);
			
			$(document).on('change', '#kpcnt', function(){
				alert('kpcnt >>> : ')
				let cntS = $('#kpcnt').val();
				alert("cntS >>> : " + cntS);			
				let kppriceSum = comma_replace(kpprice) * cntS;			
				$('#kppricesum').val(comma(kppriceSum));
			});
			
			$(document).on('click', '#cartBtn', function(){
				alert('cartBtn >>> : ');
				
				let kpcntV = $('#kpcnt').val();
				alert("kpcntV >>> : " + kpcntV);
				let priceSum = $('#kppricesum').val();
				alert("priceSum >>> : " + priceSum);
				
				if (kpcntV == 0 && priceSum == 0){
					alert("상품을 수량을 선택하시오 !!!");
					return;
				}
				
				$('#productSelectForm').attr({"action":"kosmoCartInsert.k","method":"GET"}).submit();
				
				
				
				$('#productSelectForm').attr({"action":"kosmoCartInsert.k", "method":"GET"}).submit();
			});
			
			$(document).on('click', '#stockBtn', function(){
				alert('stockBtn >>> : ');
			});
			
			$(document).on('click', '#buyBtn', function(){
				alert('buyBtn >>> : ');
			});
		});	
	
	</script>
	<style type="text/css">
		
		table {
			margin: 20px auto;
		}
		
		table, td, th {
			border-collapse : collapse;
			border: 1px solid black;
		}
	</style>
</head>
<body>
	<h3>kosmoProductSelect.jsp</h3>
	<hr>
	<div>
		<form name="productSelectForm" id="productSelectForm">
			<table>
				<tr>
					<td rowspan="7" align="center" vertical-align="middle" style="width:200px;">
						<img src="/kosmoSpring/fileupload/product/<%= _kpvo.getKpfile() %>" width="130" height="130">
					</td>
					<td align="center" colspan="2" >
						<input 	type="text" name="kpname" id="kpname" value="<%= _kpvo.getKpname() %>" 
								style="width:300px;text-align:center;" readonly />	
					</td>
				</tr>
				<tr>
					<td align="right" colspan="2">
						<input 	type="text" name="kpprice" id="kpprice" value="<%= kpprice %>" 
								style="width:280px;text-align:right;" readonly />&nbsp;원
					</td>
				</tr>
				<tr>
					<td><label align="left">수량 :</label></td>
					<td align="right">  
						<select name="kpcnt" id="kpcnt" style="width:200px;">
							<option value="0">수량</option>
							<option value="1">1</option>
							<option value="2">2</option>
							<option value="3">3</option>
							<option value="4">4</option>
						</select>
					</td>
				</tr>
				<tr>
					<td><label align="left">총 합계 :</label> </td>
					<td align="right">
						<input 	type="text" name="kppricesum" id="kppricesum" value="0" 
							style="width:170px;text-align:right;" readonly />&nbsp;원
					</td>
				</tr>
				<tr>
					<td><label align="left">시간 : </label></td>
					<td align="right">
					<font size="5" style="color:red;"><span id="time"></span></font>
					</td>
				</tr>
				<tr>
					<td align="center" colspan="2">
						<input type="hidden" name="kpfile" id="kpfile" value="<%= _kpvo.getKpfile() %>" >
						<input type="hidden" name="kpid" id="kpid" value="<%= _kpvo.getKpid() %>" >
						<input type="hidden" name="kpnum" id="kpnum" value="<%= _kpvo.getKpnum() %>" >
						<input type="hidden" name="kmnum" id="kmnum" value="<%=  1234 %>" >
						<input type="button" id="cartBtn" value="장바구니" style="width:150px;">
						<input type="button" id="stockBtn" value="재고확인" style="width:155px;">
					</td>
				</tr>
				<tr>
					<td align="center" colspan="2">
						<input type="button" id="buyBtn" value="구매하기" style="width:310px;" >
					</td>
				</tr>
			</table>
		</form>
	</div>
</body>
</html>

8교시 (17:30-18:30)

상품 상세 페이지 만들기

  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>index.jsp</h3>
	<hr>
	<a href="kosmoProductInsertForm.k">코스모 상품 입력</a><br>
	<a href="kosmoProductSelectAll.k">코스모 상품 전체 조회</a><br>
</body>
</html>


Notes

  • 스프링에서는 이벤트, 콘트롤러, 쿼리만 신경쓰면 된다.

728x90