Spring

[Spring] 게시판 예제 / 이벤트 상품별로 분류하기 / 선택한 체크박스만삭제하기

sian han 2022. 6. 14. 14:56

※ 이벤트 상품별로 분류하기

 - 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);	         
	     });
	});