Coding Planet
์ผํ๋ชฐ ์ํ ์นดํ ๊ณ ๋ฆฌ ๊ตฌํํ๊ธฐ - ์ฟผ๋ฆฌ ์คํธ๋ง ๋ณธ๋ฌธ
๐ํ๋ก์ ํธ/๐ณ์ผํ๋ชฐ ํ๋ก์ ํธ
์ผํ๋ชฐ ์ํ ์นดํ ๊ณ ๋ฆฌ ๊ตฌํํ๊ธฐ - ์ฟผ๋ฆฌ ์คํธ๋ง
jhj.sharon 2023. 6. 13. 14:14๋ฐ์ํ
์ผํ๋ชฐ์ ๋์ผํ ํ ํ๋ฆฟ์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
ํนํ ์ํ์ ์ํ์ ์, ๊ฐ๊ฒฉ, ์นดํ ๊ณ ๋ฆฌ ๋ฑ๋ฑ ์ฌ๋ฌ ์กฐ๊ฑด์ ์ํด ํํฐ๋งํ ๋๋ ์ถ๋ ฅ๋๋ ์ํ์ ๋ค๋ฅด๋๋ผ๋ ๊ทธ ํ์์ ๋๋ถ๋ถ ๋์ผํ๋ค. ์ํ์ ์์ธํ์ด์ง๋ ์ธ๋ถ ์ ๋ณด๋ง ๋ค๋ฅผ ๋ฟ ๊ทธ ํ์์ ๋์ผํ๋ค.
๋ฐ๋ผ์, ํ์์ ์ ์งํ๋ฉด์ ์ธ๋ถ๋ด์ฉ์ ๋ค๋ฅด๊ฒ ํ๊ธฐ ์ํด์๋ ํน์ ์ ๋ณด๊ฐ ํ์ํ๋ฐ ์ด๋ฌํ ์ ๋ณด๋ฅผ url์ ํตํด ๋๊ฒจ์ฃผ๋ ๊ฒ์ด ์ฟผ๋ฆฌ ์คํธ๋ง์ด๋ค.
1. ์ฟผ๋ฆฌ์คํธ๋ง์ด๋?
- ์ฟผ๋ฆฌ ์คํธ๋ง(Query String)์ URL์ ์ผ๋ถ๋ก์จ ์น ํ์ด์ง๋ก ์ ๋ฌ๋๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ด๋ค.
- ์ฟผ๋ฆฌ ์คํธ๋ง์ `?` ๋ฌธ์๋ก URL์ ๊ฒฝ๋ก์ ๊ตฌ๋ถ๋๋ฉฐ, `key=value` ํ์์ผ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ํํํ๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ `&` ๋ฌธ์๋ก ๊ตฌ๋ถ๋๋ค.
- ์์ URL์์ `?` ์ดํ์ ๋ฌธ์์ด์ธ `category=poster&type=photo`๊ฐ ์ฟผ๋ฆฌ ์คํธ๋ง์ด๋ค.
- ์ด ์ฟผ๋ฆฌ ์คํธ๋ง์ `category`์ `type` ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๊ฐ์ `poster`์ `photo`์ด๋ค.
- ์ ์์์์ productMain์ 'path' ํน์ '๋ผ์ฐํธ'๋ผ๊ณ ํ๋ค.
- ์์ ๊ฐ์ด ์ฟผ๋ฆฌ์คํธ๋ง์ ์ด์ฉํ ๊ฒฝ์ฐ ํ๋์ path๋ก ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ดํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
2. ์ฟผ๋ฆฌ์คํธ๋ง ์ฌ์ฉํ๊ธฐ
1) ์ฟผ๋ฆฌ์คํธ๋ง ์ค์ ํ๊ธฐ
- ํ์ฌ ํ๊ณ ์๋ ์ผํ๋ชฐ ๊ฐ์ธ ํ๋ก์ ํธ์์ ์ํ ๋ชฉ๋ก์์ ์ํ ์ด๋ฏธ์ง ์นด๋ ํด๋ฆญ์ ๊ฐ๋ณ ์์ธํ์ด์ง๋ก ์ด๋ํ๋ ์ฃผ์์ด๋ค.
- ์ฟผ๋ฆฌ์คํธ๋ง์ ์๋์ ๊ฐ์ด ์ค์ ํด์ฃผ์๋ค.
- ์ฟผ๋ฆฌ ์คํธ๋ง์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋์ฒ๋ผ ์ง์ ์ ๋ ฅํด๋ ๋๊ณ JavaScript์ ํจ์๋ก ๋ง๋ค์ด์ค๋ ๋๋ค. ์ค์ํ๊ฑด ์ด๋ป๊ฒ ๋ง๋๋๋๊ณ ์๋๊ณ '?' ํ์์ ์งํค๋ ๊ฒ์ด๋ค.
<div class="product-item" id="${itemObj.productId}">
<div class="product-item-img">
<a href="/stroke/product/productDetail?product_id=${itemObj.productId}">
<img src="../${itemObj.productImage}" alt="">
</a>
<i class="${heartIconClass}" style="${heartIconStyle}"></i>
</div>
<div class="product-item-info">
<span>${itemObj.productName}</span>
<span>${itemObj.productArtist}</span>
<span>${itemObj.productPrice}์</span>
</div>
</div>
<a href="/stroke/product/productDetail?product_id=${itemObj.productId}">
- ajax๋ก ์๋ฒ์์ ์ ์ฒด ์ํ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ธ์์ ๊ฐ์ฒด๋ฐฐ์ด๋ก ์ ์ฅํ๊ณ ์ํ ์นด๋๋ฅผ ๋์ ์ผ๋ก ๋ง๋ค๊ณ ์๋ค (tmi)
2) ์ปจํธ๋กค๋ฌ์์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ํด๋น ๊ฐ ๋ฐ์์ค๊ธฐ
//์ ํ ์์ธํ์ด์ง ์ด๋
@GetMapping("/productDetail")
public String getProductDetailPage(@RequestParam("product_id")int productId,
Model model) {
// productId๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ์ ๋ณด ์กฐํ
Product product = service.getProductById(productId);
// ์กฐํ๋ ์ํ ์ ๋ณด๋ฅผ ๋ชจ๋ธ์ ์ถ๊ฐํ์ฌ ๋ทฐ๋ก ์ ๋ฌ
model.addAttribute("product", product);
return "product/productDetail"; // productDetail.jsp์ ๊ฐ์ ๋ทฐ ํ์ด์ง๋ฅผ ๋ฐํํฉ๋๋ค.
}
- @RequestParam("product_id")int productId : ์ฟผ๋ฆฌ์คํธ๋ง์ ๊ฒฝ์ฐ RequestParam์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ํด๋น๊ฐ์ ๋ฐํ์ผ๋ก ์๋ฒ์์ ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ View๋จ์ผ๋ก ๋ค์ ๋ณด๋ด์ค๋ค.
3) JSP์์ ํ์ด์ง ๊ตฌํํ๊ธฐ
<!-- ์ํ ํค๋ ์์ญ -->
<div class="product-detailArea" >
<!-- ์ํ ์ธ๋ค์ผ ์์ญ -->
<div class="product-imageArea" >
<img class="target" src="${contextPath}/${product.productImage}" data-zoom="2">
</div>
<!-- ์ํ ์ ๋ณด ์์ญ -->
<div class="product-infoArea" >
<div class="product-headingArea">
<h2>${product.productName}</h2>
<i class="fa-regular fa-heart"></i>
</div>
<div class="product-info-detail">
<p class="writerName">${product.productArtist}</p>
<button id="artist-page-btn" onclick="location.href='#' ">์๊ฐํ์ด์ง</button>
<p class="product-content">${product.productContent}</p>
</div>
<hr>
<div class="product-price">
<table summary="๊ฐ๊ฒฉํ
์ด๋ธ">
<tr>
<td class="td1">ํ๋งค๊ฐ</td>
<td class="td2">${product.productPrice}์</td>
</tr>
</table>
<hr>
</div>
<div class="min-order">
<span >์ต์์ฃผ๋ฌธ์๋ : 1๊ฐ</span>
</div>
<div class="product-option">
<table summary="๊ฐ๊ฒฉํ
์ด๋ธ">
<tr>
<td class="td1">ํ์์ต์
</td>
<td class="td2">
<select name="option1" id="option1">
<c:if test="${not empty product.productOption1}">
<c:set var="options" value="${fn:split(product.productOption1, '/')}"/>
<c:forEach items="${options}" var="option">
<option value="${option}">${option}</option>
</c:forEach>
</c:if>
<c:if test="${empty product.productOption1 and not empty product.productOption2}">
<c:set var="options" value="${fn:split(product.productOption2, '/')}"/>
<c:forEach items="${options}" var="option">
<option value="${option}">${option}</option>
</c:forEach>
</c:if>
</select>
</td>
</tr>
</table>
</div>
๋ฐ์ํ
'๐ํ๋ก์ ํธ > ๐ณ์ผํ๋ชฐ ํ๋ก์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Comments