※ 이벤트 상품별로 분류하기
- name 이 같은 param 을 value 만 다르게 줘서 메서드 한개로 3가지를 분류할 수 있다
1. 뷰 (productByCategory.jsp)
- param 의 이름은 eventName 으로 같고, value 가 다른걸 볼 수 있음
- productEvent 페이지가 import 되어있다
<c:import url="/shop/product/productEvent" >
<c:param name="eventName" value="NEW"></c:param>
</c:import>
<c:import url="/shop/product/productEvent" >
<c:param name="eventName" value="BEST"></c:param>
</c:import>
<c:import url="/shop/product/productEvent?eventName=MD" >
</c:import>
2.컨트롤러
- eventName 이라는 Name 을 가진 파라미터를 받아서 String eventName 에 넣음
@Controller
@RequestMapping("/shop/product")
@RequiredArgsConstructor
public class ProductController {
private static final Logger logger
=LoggerFactory.getLogger(ProductController.class);
private final ProductService productService;
@RequestMapping("/productEvent")
public String pdEvent(@RequestParam String eventName, ModelMap model) {
//1
logger.info("이벤트별 상품 조회 파라미터 eventName={}", eventName);
//2 DB작업
3. xml
- xml 에서 eventName 파라미터를 이용하여
전체 상품 중 "eventName" 에 해당하는 상품들을 출력하는 쿼리작성
<select id="selectProductByEvent" parameterType="string"
resultType="productVo">
select * from productEventView
where eventname=#{eventName}
</select>
4. productDAO
@Mapper
public interface ProductDAO {
List<ProductVO> selectProductByEvent(String eventName);
5.productService
public interface ProductService {
List<ProductVO> selectProductByEvent(String eventName);
5.productServiceImpl
@Service
@RequiredArgsConstructor
public class ProductServiceImpl implements ProductService {
private final ProductDAO productDao;
@Override
public List<ProductVO> selectProductByEvent(String eventName) {
return productDao.selectProductByEvent(eventName);
}
6. 컨트롤러
- eventName 에 해당하는 상품의 vo list 를 "list" 에 담아 뷰로 리턴
@RequestMapping("/productEvent")
public String pdEvent(@RequestParam String eventName, ModelMap model) {
//1
logger.info("이벤트별 상품 조회 파라미터 eventName={}", eventName);
//2
List<ProductVO> list=productService.selectProductByEvent(eventName);
logger.info("이벤트별 상품 조회 결과 list.size={}", list.size());
//3
model.addAttribute("list", list);
//4
return "/shop/product/productEvent";
}
7. 뷰 (productEvent.jsp)
<c:forEach var="vo" items="${list }">
<!-- 반복 시작 -->
<div class="divPd">
<a href
="<c:url value='/shop/product/productDetail?productNo=${vo.productNo }'/>">
<img src="<c:url value='/pd_images/${vo.imageURL}'/>">
</a>
<br>
${vo.productName }<br>
<fmt:formatNumber value="${vo.sellPrice }" pattern="#,###"/>원
</div>
<!-- 반복 끝 -->
</c:forEach>
※ 선택한 체크박스만삭제하기
1. 뷰 body
<tbody>
<c:if test="${empty list }">
<tr class="align_center">
<td colspan="7">해당하는 상품이 없습니다.</td>
</tr>
</c:if>
<c:if test="${!empty list }">
<!-- 반복 시작 -->
<c:set var="i" value="0" />
<c:forEach var="vo" items="${list }" >
<tr>
<td>
<input type="checkbox" name="pdItems[${i }].productNo"
value="${vo.productNo }">
<input type="hidden" name="pdItems[${i }].imageURL"
value="${vo.imageURL }">
<c:set var="i" value="${i+1 }" />
</td>
<td>
<img src="<c:url value='/pd_images/${vo.imageURL }'/>"
alt="${vo.productName }" width="50">
</td>
<td>${vo.productName }</td>
<td><fmt:formatNumber value="${vo.sellPrice }"
pattern="#,###"/>원</td>
<td><fmt:formatDate value="${vo.regDate }"
pattern="yyyy-MM-dd"/></td>
<td><a href="#">수정</a></td>
<td><a href="#">삭제</a></td>
</tr>
</c:forEach>
<!-- 반복 끝 -->
</c:if>
</tbody>
2. jquery
$(function(){ // 체크되어있는게없으면 삭제불가
$('#btMultiDel').click(function(){
var count = $('tbody input[type=checkbox]:checked').length;
if(count>0){
$('form[name="frmList"]').prop('action',
'<c:url value="/admin/product/deleteMulti" />');
$('form[name="frmList"]').submit();
}else{
alert('삭제하고 싶은 상품을 먼저 체크하세요');
}
});
//체크박스 한번에 체크하기
$('input[name="chkAll"]').click(function() {
$("tbody input[type=checkbox]").prop("checked", this.checked);
});
});
'Spring' 카테고리의 다른 글
[Spring] 디자인 패턴 : 적은 코드 수정으로 공통 로직을 작성하기 (0) | 2025.06.11 |
---|---|
[Spring] 주문하기 / 장바구니에 담기 / 장바구니 목록 보여주기 (0) | 2022.06.15 |
[Spring] 스프링 작업 순서 / 나를 위한 기초 다지기 (0) | 2022.06.10 |
[Spring] 파일업로드 / 다운로드 (0) | 2022.06.02 |
[Spring] spring boot 스프링부트 (0) | 2022.05.31 |