Olá , logo após escolhermos o livro que queremos comprar, o livro é adicionado no carrinho(quantidade=1) e somos redirecionados para a url "/cart" onde podemos ver os livros já presentes no carrinho com seus respectivos preços e quantidades:
<table id="cart-table">
<colgroup>
<col class="item-col">
<col class="item-price-col">
<col class="item-quantity-col">
<col class="line-price-col">
<col class="delete-col">
</colgroup>
<thead>
<tr>
<th class="cart-img-col"></th>
<th width="65%">Item</th>
<th width="10%">Preço</th>
<th width="10%">Quantidade</th>
<th width="10%">Total</th>
<th width="5%"></th>
</tr>
</thead>
<tbody>
<c:forEach items="${shoppingCart.list}" var="item">
<tr>
<td class="cart-img-col"><img src=""
alt="${item.product.title}" /></td>
<td class="item-title">${item.product.title}-
${item.bookType}</td>
<td class="numeric-cell">${item.price}</td>
<td class="quantity-input-cell"><input type="number" min="0"
readonly="readonly" value="${shoppingCart.getQuantity(item)}"></td>
<td class="numeric-cell">${shoppingCart.getTotal(item)}</td>
<td class="remove-item"><form:form method="post"
action="${spring:mvcUrl('SCC#remove').arg(0,item.product.id).arg(1,item.bookType).build()}">
<input type="image"
src="//cdn.shopify.com/s/files/1/0155/7645/t/177/assets/excluir.png?58522"
alt="Excluir" title="Excluir" />
</form:form></td>
</tr>
</c:forEach>
</tbody>
<tfoot>
<tr>
<td colspan="2"><form:form
action="${spring:mvcUrl('PC#checkout').build()}" method="post">
<input type="submit" class="checkout" name="checkout"
value="Finalizar compra " id="checkout" />
</form:form></td>
<td class="numeric-cell">${shoppingCart.total}</td>
<td></td>
</tr>
</tfoot>
</table>
quando estamos utilizando o escopo de sessão com o spring temos o mesmo conceito de bidirecional data binding existente no JSF?
Vamos supor que eu escolha comprar o livro "Spring MVC: domine o principal framework web Java" e escolha impresso, só que eu não desejo comprar apenas 1 exemplar deste livro, eu quero comprar 10 exemplares. O comportamento natural do usuário é ir no input refente à quantidade e alterar de 1 para 10 a quantidade desse item no carrinho e não ficar voltando para a listagem e ficar incluindo o mesmo livro 10 vezes .
A primeira pergunta é: como fazer para que a quantidade digitada no input seja automaticamente refletida no carrinho para que quando eu finalizar a compra eu já tenha o carrinho com os produtos e as quantidades corretas?
A segunda pergunta,que é relacionada com a primeira. Se nesta mesma tela de finalização de compras eu tivesse outros inputs referentes por exemplo à forma de pagamento ou entrega e que estes dados devessem estar no carrinho, como eu poderia ter essa informações disponíveis na finalização da compra?
@RequestMapping(value = "checkout", method = RequestMethod.POST)
public Callable<ModelAndView> checkout(@AuthenticationPrincipal SystemUser user) {
return () -> {
BigDecimal total = shoppingCart.getTotal();
String uriToPay = "http://book-payment.herokuapp.com/payment";
try {
restTemplate.postForObject(uriToPay,
new PaymentData(total), String.class);
sendNewPurchaseMail(user);
return new ModelAndView("redirect:/payment/success");
} catch (HttpClientErrorException exception) {
return new ModelAndView("redirect:/payment/error");
}
};
}