<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<div>
<form action="deletepurchase.do" method="post" id="form4">
<table class="table">
<thead>
<tr>
<th scope="col">주문번호</th>
<th scope="col">주문수량</th>
<th scope="col">주문일자</th>
<th scope="col">고객아이디</th>
<th scope="col">고객명</th>
<th scope="col">물품번호</th>
<th scope="col">물품명</th>
<th scope="col">물품가격</th>
<th scope="col">주문금액</th>
</tr>
</thead>
<tbody>
<c:set var="total" value="${0}" />
<c:forEach var="obj" items="${list}">
<tr>
<th scope="row"><input type="checkbox" name="chk[]"
value="${obj.no}" />${obj.no}</th>
<td>${obj.cnt}</td>
<td>${obj.regdate}</td>
<td>${obj.customerid}</td>
<td>${obj.customername}</td>
<td>${obj.itemno}</td>
<td>${obj.itemname}</td>
<td><fmt:formatNumber value="${obj.itemprice}"
pattern="#,###" /></td>
<td><fmt:formatNumber value="${obj.cnt*obj.itemprice}"
pattern="#,###" /></td>
<c:set var="total" value="${total + (obj.cnt*obj.itemprice) }" />
</tr>
</c:forEach>
<tr>
<th colspan="8">합계</th>
<td><fmt:formatNumber value="${total}" pattern="#,###" /></td>
</tr>
</tbody>
</table>
<input type="button" class="btn btn-sm btn-primary" value="주문취소"
onclick="deletePurchaseAction()" />
</form>
</div>
<script> function deletePurchaseAction() { // 태그중에서 name값이 chk[]인것을 n개 찾음 const chk = document.getElementsByName("chk[]"); let isCheck = 0; for (let i = 0; i < chk.length; i++) { //찾은 개수 만큼 반복함. if (chk[i].checked === true) { //체크된게 있다면 isCheck = 1; break; } } // 체크 된것이 있는지 확인 if (isCheck === 1) { if (confirm('주문을 취소할까요?')) { document.getElementById("form4").submit(); } } else { alert('항목을 체크하세요.'); return false; } } </script>
//삭제하기
@Delete({
"<script>",
"DELETE FROM purchase WHERE customerid=#{map.id} AND no IN( ",
"<foreach collection='map.chk' item='tmp' separator=','>",
"#{tmp}",
"</foreach>",
") ",
"</script>"
})
// DELETE FROM 테이블명 WHERE customerid = 'a' AND no (1,2,3,4);
public int deletePurchase(@Param("map") Map<String, Object> map);
주문내역을 체크해서 삭제할 수 있는 Mapper를 작성한다.
delete controller에서 chk가 배열로 지정되어있기때문에 반복문을 사용해야한다(foreach는 배열을 반복할때 사용)
foreach 반복문
collection 속성 - 전달받은 인자를 속성값으로 삽입합니다. Map, Array, List, Set 등과 같은 반복 가능한 객체를 전달할 수 있습니다.
item 속성 - collection속성에서 전달받은 collection 인자값을 대체할 '이름'을 속성 값으로 삽입합니다.
open 속성 - 구문이 시작될때 삽입할 문자열을 속성 값으로 삽입합니다.
close 속성 - 구문이 종료될때 삽입할 문자열을 속성 값으로 삽입합니다.
separator 속성 - 반복되는 구문 사이에 삽입할 문자열을 속성값으로 삽입합니다.
index 속성 - index값을 부를 일종의 변수명을 속성값으로 삽입합니다. 태그 내에 #{index}를 통해 호출할 때 0부터 반환됩니다.
//CustomerFilter에 url 등록...
@WebServlet(urlPatterns = { "/customer/deletepurchase.do" })
public class CustomerDeletePurchaseController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// n개의 값을 받을때는
String[] chk = request.getParameterValues("chk[]");
String id = (String)request.getSession().getAttribute("id");
Map<String, Object> map = new HashMap<>();
map.put("chk", chk);
map.put("id", id);
MyBatisContext.getSqlSession().getMapper(PurchaseMapper.class).deletePurchase(map);
response.sendRedirect("mypage.do?menu=4");
}
}