Como enviar um Array para um controller com post

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