Consegui atualizar a quantidade do carrinho ao clicar no botão atualizar, sem usar loop.index do varStatus conforme mostrado no vídeo. É realmente preciso usar esse índice?
Apenas coloquei um setter (setQuantidade) no CarrinhoItem, e o meu xhtml ficou assim:
<form class="formularioDoCarrinho" method="post" jsf:id="formCarrinho">
<table class="formularioDoCarrinho-tabela">
<thead class="formularioDoCarrinho-cabecalho">
<tr>
<th></th>
<th class="formularioDoCarrinho-cabecalho-item">Item</th>
<th class="formularioDoCarrinho-cabecalho-item formularioDoCarrinho-cabecalho-preco">Preço</th>
<th class="formularioDoCarrinho-cabecalho-item">Qtd</th>
<th class="formularioDoCarrinho-cabecalho-item">Total</th>
<th></th>
</tr>
</thead>
<tbody>
<ui:repeat value="#{carrinhoComprasBean.itens}" var="carrinhoItem">
<tr>
<td class="formularioDoCarrinho-item">
<a href="/products/livro-jquery-mobile">
<img class="formularioDoCarrinho-item-imagem" src="#{request.contextPath}/file/#{carrinhoItem.livro.capaPath}" />
</a>
</td>
<td class="formularioDoCarrinho-item">
<h2 class="formularioDoCarrinho-item-titulo">#{carrinhoItem.livro.titulo}</h2>
</td>
<td class="formularioDoCarrinho-item formularioDoCarrinho-item-preco">
<h:outputText value="#{carrinhoItem.livro.preco}"
id="precoUnitario"><f:convertNumber currencySymbol="R$" type="currency" minFractionDigits="2"/></h:outputText>
</td>
<td class="formularioDoCarrinho-item">
<input class="formularioDoCarrinho-item-quantidade"
type="number"
min="1"
jsf:value="#{carrinhoItem.quantidade}" />
</td>
<td class="formularioDoCarrinho-item formularioDoCarrinho-item-precoTotal" title="Preço unitário: #{carrinhoItem.livro.preco}">
<h:outputText value="#{carrinhoItem.livro.preco}" id="precoCalculado" >
<f:convertNumber currencySymbol="R$" type="currency" minFractionDigits="2"/>
</h:outputText>
</td>
<td class="formularioDoCarrinho-item">
<a href="https://www.casadocodigo.com.br/cart/change?id=18404155847&quantity=0">
<img class="formularioDoCarrinho-item-remover-imagem" src="#{request.contextPath}/resources/imagens/trash.png" alt="X" title="Remover" />
</a>
</td>
</tr>
</ui:repeat>
</tbody>
<tfoot class="formularioDoCarrinho-rodape">
<tr>
<td class="formularioDoCarrinho-rodape-item formularioDoCarrinho-finalizar" colspan="3">
<button class="formularioDoCarrinho-finalizar-botao" name="checkout">Finalizar<span class="formularioDoCarrinho-finalizar-botao-texto" role="presentation"> compra</span></button>
</td>
<td class="formularioDoCarrinho-rodape-item">
<button class="formularioDoCarrinho-atualizar">Atualizar</button>
</td>
<td class="formularioDoCarrinho-rodape-item">
<h:outputText value="#{carrinhoComprasBean.calcularTotalCarrinho()}" id="precoTotalCalculado" >
<f:convertNumber currencySymbol="R$" type="currency" minFractionDigits="2"/>
</h:outputText>
</td>
<td></td>
</tr>
</tfoot>
</table>
</form>
@Model
public class CarrinhoComprasBean {
@Inject
private CarrinhoCompras carrinhoCompras;
@Inject
private DAO<Livro> dao;
public String adicionar(Long idLivro) {
dao.localizarPor(idLivro)
.ifPresent(carrinhoCompras::adicionar);
return "carrinho?faces-redirect=true";
}
public List<CarrinhoItem> getItens() {
return carrinhoCompras.listarTodosItens();
}
public BigDecimal calcularTotalCarrinho() {
return carrinhoCompras.calcularTotalCarrinho();
}
}