
OrderController
OrderDomain 객체와 함께 여러 개의 리스트(상품번호, 가격, 수량, 옵션 리스트 등)가 파라미터로 전달// 결제 완료 - 정희준
@RequestMapping(value = "/completeOrder.do", method = RequestMethod.POST)
public String completeOrder(@ModelAttribute OrderDomain orderDomain,
@RequestParam("productNoList") List<Integer> productNoList,
@RequestParam("productPriceList") List<Integer> productPriceList,
@RequestParam("orderQtyList") List<Integer> orderQtyList,
@RequestParam("orderProductOptionsList") List<String> orderProductOptionsList, // 옵션 추가
HttpSession session, Model model) {
System.out.println("completeOrder invoked, orderDomain: " + orderDomain);
orderDomain에 세팅orderProductOptionsList)가 null이거나 비어있을 경우, 각 상품에 대해 빈 문자열의 옵션 값으로 초기화// 폼에서 전달된 상품 정보를 OrderDomain에 세팅
orderDomain.setProductNoList(productNoList);
orderDomain.setProductPriceList(productPriceList);
orderDomain.setOrderQtyList(orderQtyList);
orderDomain.setOrderProductOptionsList(orderProductOptionsList); // 옵션 리스트 추가
// orderProductOptionsList가 null이면 빈 리스트로 초기화
if (orderProductOptionsList == null || orderProductOptionsList.isEmpty()) {
orderProductOptionsList = new ArrayList<>();
for (int i = 0; i < productNoList.size(); i++) {
orderProductOptionsList.add(""); // 빈 옵션 추가
}
}
orderDomain.setOrderProductOptionsList(orderProductOptionsList);
orderDomain.orderAmount에 설정// 총 주문금액 계산
int shippingFee = 3500;
int totalAmount = shippingFee;
if (productPriceList != null && orderQtyList != null) {
// 리스트 크기가 동일한지 확인 (불일치 시 예외 처리 또는 로그 남기기)
int size = productPriceList.size();
for (int i = 0; i < size; i++) {
// 각 요소가 null이면 기본값 0으로 처리
Integer price = productPriceList.get(i);
Integer qty = orderQtyList.get(i);
if (price == null) {
price = 0;
}
if (qty == null) {
qty = 0;
}
totalAmount += price * qty;
}
}
orderDomain.setOrderAmount(totalAmount);
System.out.println("Computed Order Amount: " + totalAmount);
OrderService , order.xml