romworld

JSP 18 - 쇼핑몰 사이트 만들기(6) [상품 등록 - (Bundle 사용)] 본문

WEB/JSP

JSP 18 - 쇼핑몰 사이트 만들기(6) [상품 등록 - (Bundle 사용)]

inderrom 2023. 1. 11. 12:13

만들었던 상품 등록 페이지에 번들 추가하기

 

 

1. bundle 파일 생성

 

<message_en.properties>

title = Product Addition
productId = Product ID
pname =  Name
unitPrice =Unit Price
description = Description
manufacturer = Manufacturer
category =   Category   
categoryselect = Select Category   
unitsInStock = Units in Stock
condition = Condition   
productImage = Image
condition_New = New
condition_Old = Old
condition_Refurbished = Refurbished
button = Insert
init = Reset
list= List

<message.properties>

title = 상품 등록
productId = 상품 코드
pname = 상품명
unitPrice = 가격
description = 상세 설명
manufacturer = 제조사
category =  분류 
categoryselect = 분류를 선택하세요     
unitsInStock = 재 고수   
condition = 상태
productImage = 이미지
condition_New = 신규 제품
condition_Old = 중고 제품 
condition_Refurbished = 재생 제품 
button = 등록 
init = 초기화
list= 목록

 

<addProduct.jsp>

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

추가한다.

 

 

body태그 안에&nbsp; 설정해주고
fmt:message로 .properties에 설정한 값을 꺼내준다.

<addproduct.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import="kr.or.ddit.dao.ProductRepository"%>
<!-- 
웹 쇼핑몰의 상품 정보를 등록하는 페이지
-->
<% //스크립틀릿
	ProductRepository productRepository = ProductRepository.getInstance();
	String productId = productRepository.getNextProductId();
%>
<!-- scope(영역) : page(pageContext)-기본, request, session, application -->
<c:set var="productId" value="<%=productId%>" scope="page" />
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/css/bootstrap.min.css" />
<script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="/js/jquery-3.6.3.min.js"></script>  
<title>상품 등록</title>
<script type="text/javascript">
$(function(){
	
});
//핸들러 함수
function checkAddProduct(){
	let productId = $("input[name='productId']").val();
	let pname = $("input[name='pname']").val();
	let unitPrice = $("input[name='unitPrice']").val();
	let unitsInStock = $("input[name='unitsInStock']").val();
	//input type="file"
	let productImage = $("input[name='productImage']").val();
	
	//[0-9]대신 \d
	let regExpProductId = /^P[0-9]{4,11}$/;
	//+ : 1이상
	//? : 있을 수도 있고, 없을 수도 있음
	let regExpUnitPrice = /^\d+(?:[.]?[\d]?[\d]?)$/; //소수점 둘째 자리
	
	console.log("productId : " + productId);
	console.log("pname : " + pname);
	console.log("unitPrice : " + unitPrice);
	console.log("unitsInStock : " + unitsInStock);
	
	//상품아이디 체크
	//1) 첫 글자는 반드시 P로 시작하고 숫자를 조합하여 5~12자리까지 입력하세요.
	//정규표현식.test(대상문자열)
	if(!regExpProductId.test(productId)){
		alert("[상품 코드]\n첫 글자는 반드시 P로 시작하고 숫자를 조합하여 5~12자리까지 입력하세요.");
		$("input[name='productId']").focus();
		return false;
	}
	
	//상품명 체크
	//2) 최소 4자에서 최대 12자까지 입력하세요.
	if(pname.length<4 || pname.length>12){
		alert("[상품명]\n최소 4자에서 최대 12자까지 입력하세요.");
		$("input[name='pname']").focus();
		return false;
	}
	
	//상품 가격 체크
	//3) 숫자만 입력하세요. 음수는 입력할 수 없습니다. 소수점 둘째 자리까지만 입력하세요.
	//isNaN : is Not a Number
	if(unitPrice.length==0 || isNaN(unitPrice)){
		alert("[가격]\n숫자만 입력하세요.");
		$("input[name='unitPrice']").focus();
		return false;
	}
	
	if(unitPrice < 0){//음수
		alert("[가격]\n음수는 입력할 수 없습니다.");
		$("input[name='unitPrice']").focus();
		return false;
	}else{//양수
		if(!regExpUnitPrice.test(unitPrice)){
			alert("[가격]\n소수점 둘째 자리까지만 입력하세요.");
			$("input[name='unitPrice']").focus();
			return false;
		}
	}
	
	//재고 수 체크
	//4) 숫자만 입력하세요
	if(isNaN(unitsInStock)){
		alert("[재고 수]\n숫자만 입력하세요");
		$("input[name='unitsInStock']").focus();
		return false;
	}
	
	// 파일 체크
	// 5) 파일을 선택하세요
	console.log("productImage : " + $("input[name='productImage']").val());
	if(productImage==""){
		alert("[상품이미지]\n파일을 선택하세요");
		return false;
	}
	
	$("#newProduct").submit();
	
}
</script>
</head>
<body>
<!--  URI : /addProduct.jsp?language=en
	요청 파라미터(Param) : language=en
 -->
 <fmt:setLocale value="${param.language}"/>
<fmt:bundle basename="bundle.message">
<!-- 액션 스크립트 -->
<jsp:include page="menu.jsp"></jsp:include>

<div class="jumbotron">
	<!-- 이 안에 내용 있다 -->
	<div class="container">
		<h1 class="display-3"><fmt:message key="title"/></h1>
	</div>
</div>
<!-- 이 안에 내용 있다 -->
<div class="container">
	<!-- 한/영 전환 -->
	<div class="text-right">
		<a href="addProduct.jsp?language=ko">Korea</a>
		<a href="addProduct.jsp?language=en">English</a>
	</div>
	<!-- 폼 페이지 시작 -->
	<form name="newProduct" id="newProduct" action="processAddProduct.jsp"
		class="form-horizontal" method="post" enctype="multipart/form-data" >
		<!-- 가로방향 (행=로우=튜플=레코드) -->
		<div class="form-group row">
			<label class="col-sm-2"><fmt:message key="productId"/></label>
			<div class="col-sm-3">
				<input type="text" name="productId" class="form-control"
				 value="${productId}"	readonly />
			</div>
		</div>
		<div class="form-group row">
			<label class="col-sm-2"><fmt:message key="pname"/></label>
			<div class="col-sm-3">
				<input type="text" name="pname" class="form-control"
					required />
			</div>
		</div>
		<div class="form-group row">
			<label class="col-sm-2"><fmt:message key="unitPrice"/></label>
			<div class="col-sm-3">
				<input type="number" name="unitPrice" class="form-control"
					required />
			</div>
		</div>
		<div class="form-group row">
			<label class="col-sm-2"><fmt:message key="description"/></label>
			<div>
				<!-- 세로크기 : cols, 가로크기 : rows -->
				<textarea id="description" name="description" cols="100"
				 rows="2" class="form-control"></textarea>
			</div>
		</div>
		<div class="form-group row">
			<label class="col-sm-2"><fmt:message key="manufacturer"/></label>
			<div class="col-sm-3">
				<input type="text" name="manufacturer" class="form-control" />
			</div>
		</div>
		<div class="form-group row">
			<label class="col-sm-2"><fmt:message key="category"/></label>
			<div class="col-sm-3">
				<!-- 
				input type="checkbox" / "radio" => checked
				 -->
				<select id="category" name="category" class="form-control" 
					aria-label="Default select example">
				  <option selected><fmt:message key="categoryselect"/></option>
				  <option value="Smart Phone" selected>Smart Phone</option>
				  <option value="Notebook">Notebook</option>
				  <option value="Tablet">Tablet</option>
				</select>
			</div>
		</div>
		<div class="form-group row">
			<label class="col-sm-2"><fmt:message key="unitInStock"/></label>
			<div class="col-sm-3">
				<input type="number" name="unitsInStock" class="form-control" />
			</div>
		</div>
		<div class="form-group row">
			<label class="col-sm-2"><fmt:message key="condition"/></label>
			<div class="col-sm-5">
				<!-- input 시리즈의 미리체크? checked -->
				<!-- select 시리즈의 미리체크? selected -->
				<input type="radio" id="New" name="condition" value="New" checked />
				<label for="New"><fmt:message key="condition_New"/></label>
				<input type="radio" id="Old" name="condition" value="Old" />
				<label for="Old"><fmt:message key="condition_Old"/></label>
				<input type="radio" id="Refurbished" name="condition" value="Refurbished" />
				<label for="Refurbished"><fmt:message key="condition_Refurbished"/></label>
			</div>
		</div>
		<div class="form-group row">
			<label class="col-sm-2"></label>
			<div class="col-sm-5">
				<input type="file" name="productImage" class="form-control" />
			</div>
		</div>
		<div class="form-group row">
			<div class="col-sm-offset-2 col-sm-10">
				<!-- <button type="submit" ..>등록</button> -->
				<!-- checkAddProduct() : 핸들러 함수 -->
				<input type="button" class="btn btn-primary" 
					value="<fmt:message key="button"/>" onclick="checkAddProduct()" />
				<input type="reset" class="btn btn-warning" 
					value="<fmt:message key="init"/>"  />
				<input type="button" class="btn btn-success" 
					value=<fmt:message key="list"/> onclick="javascript:location.href='products.jsp'"
					style="float:right;" />
			</div>
		</div>
	</form>
	<!-- 폼 페이지 끝 -->
</div>

<jsp:include page="footer.jsp"></jsp:include>
</fmt:bundle>

<script type="text/javascript">
CKEDITOR.replace("description");
</script>
</body>
</html>

 

korea를 눌렀을 때 한글 출력

 

English를 눌렀을 때 영문 출력

 

Comments