V ---> 데이터 ---> C
메서드 목적 : 관리자모드에서 상품을 ‘선택’ 삭제하는 메서드로 관리자가 한번에 여러 상품을 동시 삭제 할 수도 있음
<!-- 체크박스 -->
<div class="chk-option">
<label class="check-task custom-control custom-checkbox d-flex justify-content-center done-task">
<input type="checkbox" class="custom-control-input" name="number" value="${v.productNum}">
<span class="custom-control-label"></span>
</label>
</div>
<!-- custom-chart js -->
<script src="assets/js/pages/dashboard-main.js"></script>
<script type="text/javascript">
$(".custom-control-input").on("change", function() {
var productNum = $(this).val(); // 선택한 체크박스의 값 (상품 번호)
console.log(productNum);
if ($(this).prop("checked")) {
var inputElement = '<input type="hidden" name="number" value="' + productNum + '">';
$('#numbers').append(inputElement);
} else {
$("#numbers > input[value='" + productNum + "']").remove();
}
});
</script>
<div id="deletemodal${v.productNum}" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLiveLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLiveLabel">제품 삭제</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p class="mb-1">${v.productName}</p>
<p class="mb-0">정말로 삭제하시겠습니까?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">닫기</button>
<form action="deleteProduct.do" method="post">
<input type="hidden" name="productNum" value="${v.productNum}">
<button type="submit" class="btn btn-danger">삭제</button>
</form>
</div>
</div>
</div>
</div>
체크박스가 선택되면 해당 상품(들)의 상품번호(productNum)(들)을 numbers요소들을 통해deleteProductsModal창 내의 numbers요소에 추가
삭제버튼을 클릭 하면 form요소를 통해 post방식으로 서버에 요청
이때 form의 action속성에 지정된 URL인 deleteProducts.do로 요청을 전송
productNum값을 해당 form의 데이터로 전송해서 ‘number’라는 이름의 매개변수로 컨트롤러에게 전달
// 관리자 상품 선택 삭제 액션
@RequestMapping(value="/deleteProducts.do")
public String deleteProducts(@RequestParam("number") List<String> selectedProducts,ImagesVO iVO) {
System.out.println("선택한 숫자들 잘 오나용? = "+selectedProducts);
for(int i = 0; i < selectedProducts.size(); i++) {
iVO.setProductNum(Integer.parseInt(selectedProducts.get(i)));
List<ImagesVO> idatas = imagesService.selectAll(iVO);
for (int j = 0; j<idatas.size();j++) {
File data = new File(ImagesVO.getPath2()+idatas.get(j).getPath());
if(data.exists()) {
data.delete();
ImagesVO idata = new ImagesVO();
idata.setImageNum(idatas.get(j).getImageNum());
imagesService.delete(idata);
}
}
ProductVO pVO = new ProductVO();
pVO.setProductNum(Integer.parseInt(selectedProducts.get(i)));
productService.delete(pVO);
}
return "redirect:productListPage.do";
}
@RequestParam("number") List selectedProducts
RequestParam 어노테이션을 사용해 ‘number’매개변수에서 값을 추출
이때 productNum은 문자열 형식으로 전달
selectedProducts 라는 스트링타입의 리스트에 저장
그리고 selectedProducts에 있는 각 ‘productNum’을 반복문으로 반복하여 선택한 상품들을 삭제 진행
i변수를 통해 selectedProducts에 저장되어 있는 각 productNum을 Integer클래스의 parseInt 정적 메서드를 사용하여 정수로 형변환
형변환된 productNum을 이미지클래스의 객체인 iVO의 매게변수 productNum로 세팅
imagesService 레이어를 통해 selectAll 메서드를 활용하여 해당 상품에 연관된 이미지들을 Read불러오기로 idatas에 저장.
그리고 반복문으로 이 idatas라는 이미지목록을 순환하며 이미지 파일에 관련된 작업을 수행
File 타입의 data라는 이미지 경로를 생성후
if문을 통해 만약 이미지파일이 존재 하는지 확인하고 파일이 존재 할 경우 삭제
idatas라는 새로운 ImageVO 객체를 생성
순환하는 idatas내의 j번째의 이미지번호를 getter를 통해 가져온 후
객체의 멤버변수인 이미지번호 ImageNum로 세팅
서비스레이어를 통해 delete메서드를 수행하여 이미지 삭제
새로운 상품 객체를 생성
객체의 멤버변수인 상품번호를 순환하고 있는 i번째로 세팅
productService 레이어를 사용하여 delete메서드를 통해 상품삭제 수행
성공후