구매결정하기 뷰를 구현을 하려는데
@GetMapping("/purchase/{id}/purchase-form")
public String purchaseForm(@PathVariable Integer id, HttpServletRequest request){
Purchase purchase = purchaseService.findById(id);
System.out.println("purchase= " + purchase);
request.setAttribute("purchase",purchase);
return "purchase/purchase-form";
}
이렇게 하니까 계속 메서드를 찾을 수 없다고 400 500 오류가 뜸
이유는) 구매하기 뷰에서의 상품은 아직 구매하기 전의 상품이다! 아직 구매를 안했는데 구매가?!
즉, id는 구매한 것의 상품(purchase)이 아닌 상품의 상품(product)인 것이다.
그래서 코드를 purchase 한 것을 product으로 바꾸어 주면 성공!
@GetMapping("/purchase/{id}/purchase-form")
public String purchaseForm(@PathVariable Integer id, HttpServletRequest request){
Product product = productService.findById(id);
System.out.println("product = " + product);
request.setAttribute("product",product);
return "purchase/purchase-form";
}
해석)
@GetMapping("/purchase/{id}/purchase-form")
purchase폼을 id로 요청하면
public String purchaseForm(@PathVariable Integer id, HttpServletRequest request){
id로 상품을 찾을 거니까
Product product = productService.findById(id);
상품의 아이디로 찾아온다.
System.out.println("product = " + product);
그것을 상품이라고 칭한다.
request.setAttribute("product",product);
그 상품의 이름을 "상품"이라고 정한다.
return "purchase/purchase-form";
purchase 폼이 리턴이 되지.
}
구매결정 폼(purchase-form.mustache)
-그래서 여기의 키워드 id와 상품 정보들도 product로 만들어야 말이 맞다.
하지만 그렇게 하면 purQty도 product으로?! 노노노
왜냐면 {{ }} 이것들은 내가 값을 미리 정해놓고, 불러오는 건데
구매수량은 고객이 정하는거니까 내가 안 적어 놔도 된다. 그래서 value는 여기에 없어도 된다. 구매자에게 받아오자!
{{> layout/header}}
<div class="d-flex justify-content-center" style="margin-top: 100px; margin-bottom: 100px;">
<form action="/purchase/{{product.id}}" method="post">
<div class="p-3 m-3" style="width: 300px;">
<div class="mb-3 mt-3">
상 품 명 : <input name="name" type="text" class="form-control" value="{{product.name}}" readonly>
</div>
<div class="mb-3 mt-3">
상품가격 : <input name="price" type="number" class="form-control" value="{{product.price}}" readonly>
</div>
<div class="mb-3 mt-3">
상품수량 : <input name="qty" type="number" class="form-control" value="{{product.qty}}" readonly>
</div>
<div class="mb-3 mt-3">
구매수량 : <input name="purQty" type="number" class="form-control" placeholder="Enter your purchase amount" required>
</div>
<div class="d-flex justify-content-center">
<button type="submit" class="btn btn-primary mt-3">구매결정</button>
</div>
</div>
</form>
</div>
{{> layout/footer}}
세션에 로그인한 buyer정보 넣기
넣은거 purchasecontroller에서 session 가져와서 buyerid 불러오기
Share article