Estou usando MVC e thymeleaf.
Tenho uma página que recebe uma lista de itens de estoque para reposição. estou fazendo th:each em uma div dentro do form com um input no atributo quantidade para informar quanto desse item tenho que pedir. quando envio o formulario o controller recebe a lista vazia. Estou aprendendo html, não sei se deu para entender minha dúvida mas e basicamente como alterar uma lista que ja recebi do controller e reenviar devolta.
Aqui tem um exemplo
1 curtida
Muito obrigado, vai ajudar muito.
1 curtida
eu faco parecido com o exemplo: o campo input onde vou definir o valor, o restante dos campos caso precise enviar ficam como hidden. No meu caso como tem validacao do campo input, eu coloco todo mundo como hidden para na validacao nao perder a tabela.
<div class="tabela table-responsive" style="min-height: 300px;">
<table id="tabelaItensCotacao" class="table table-hover table-sm">
<thead>
<tr>
<th class="text-center">EAN</th>
<th class="text-center">DESCRIÇÃO</th>
<th class="text-center">UNID</th>
<th class="text-center">EMB</th>
<th class="text-center">CONSUMO</th>
<th class="text-center">MEDIA</th>
<th class="text-center">ESTOQUE</th>
<th class="text-right">COMPRA</th>
<th class="text-right">CUSTO</th>
<th class="text-right">VENDA</th>
<th class="text-center">SUGESTAO</th>
</tr>
</thead>
<tbody id="corpoTabelaItensCotacao">
<tr th:each="item,iterStat : *{itensDaCotacao}">
<td class="text-center" th:text="${item.produto.ean}">
</td>
<td th:text="${item.produto.descricao}">
</td>
<td class="text-center" th:text="${item.unidade}">UN</td>
<td class="text-center" th:text="${#numbers.formatDecimal(item.embalagem,1,3)}">1</td>
<td class="text-center" th:text="${#numbers.formatDecimal(item.quantidadeVendida,1,3)}">98</td>
<td class="text-center" th:text="${#numbers.formatDecimal(item.vendaMedia,1,3)}">5</td>
<td class="text-center" th:text="${#numbers.formatDecimal(item.estoque,1,3)}">20</td>
<td class="text-right" th:text="${#numbers.formatDecimal(item.precoCompra,1,2)}">20</td>
<td class="text-right" th:text="${#numbers.formatDecimal(item.precoCusto,1,2)}">20</td>
<td class="text-right" th:text="${#numbers.formatDecimal(item.precoVenda,1,2)}">20</td>
<td th:classappend="${item.quantidadeCompra == 0} ? bg-danger">
<input type="text"
th:id="|itensDaCotacao[${iterStat.index}].quantidadeCompra|"
th:name="|itensDaCotacao[${iterStat.index}].quantidadeCompra|"
th:value="${#numbers.formatDecimal(item.quantidadeCompra,1,3)}"
class="quantidade form-control form-control-sm p-0 text-right"
autocomplete="off"
style="text-align:right;">
</td>
<td class="d-none">
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].id|"
th:name="|itensDaCotacao[${iterStat.index}].id|"
th:value="${item.id}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].produto.id|"
th:name="|itensDaCotacao[${iterStat.index}].produto.id|"
th:value="${item.produto.id}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].produto.ean|"
th:name="|itensDaCotacao[${iterStat.index}].produto.ean|"
th:value="${item.produto.ean}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].produto.descricao|"
th:name="|itensDaCotacao[${iterStat.index}].produto.descricao|"
th:value="${item.produto.descricao}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].unidade|"
th:name="|itensDaCotacao[${iterStat.index}].unidade|"
th:value="${item.unidade}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].embalagem|"
th:name="|itensDaCotacao[${iterStat.index}].embalagem|"
th:value="${#numbers.formatDecimal(item.embalagem,1,3)}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].quantidadeVendida|"
th:name="|itensDaCotacao[${iterStat.index}].quantidadeVendida|"
th:value="${#numbers.formatDecimal(item.quantidadeVendida,1,3)}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].estoque|"
th:name="|itensDaCotacao[${iterStat.index}].estoque|"
th:value="${#numbers.formatDecimal(item.estoque,1,3)}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].vendaMedia|"
th:name="|itensDaCotacao[${iterStat.index}].vendaMedia|"
th:value="${#numbers.formatDecimal(item.vendaMedia,1,3)}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].precoVenda|"
th:name="|itensDaCotacao[${iterStat.index}].precoVenda|"
th:value="${#numbers.formatDecimal(item.precoVenda,1,2)}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].precoCusto|"
th:name="|itensDaCotacao[${iterStat.index}].precoCusto|"
th:value="${#numbers.formatDecimal(item.precoCusto,1,2)}" />
<input type="hidden" th:id="|itensDaCotacao[${iterStat.index}].precoCompra|"
th:name="|itensDaCotacao[${iterStat.index}].precoCompra|"
th:value="${#numbers.formatDecimal(item.precoCompra,1,2)}" />
</td>
</tr>
<tr th:if="*{itensDaCotacao.isEmpty()}">
<td colspan="12">Nenhum item adicionado</td>
</tr>
</tbody>
</table>
</div>
e um detalhe importante, o limite do array que voce pode enviar é de 256 itens. Caso precise de mais precisará adicionar ao seu controller esse codigo
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAutoGrowCollectionLimit(1024);
}
1 curtida