Galera, no formulário abaixo estou usando o autocomplete no input de produto. O autocomplete funciona perfeitamente. O meu problema é no momento de salvar, não estou conseguindo submeter o id do produto selecionado no autocomplete. Apenas submete o nome do produto.
Segue abaixo o código do jsp:
<form action="${linkTo[VendaController].salvar}" method="post" class="ajaxForm">
<fieldset>
<legend>Vendas</legend>
<br/>
<div style="float: left; width: 100%;">
<p>
<input type="hidden" name="venda.id" value="${venda.id}" />
<input type="hidden" name="venda.reserva.id" value="${venda.reserva.id}" />
<input id="idProduto" type="hidden" name="venda.produto.id" value="${venda.produto.id}" />
<label for="txtNome">Acomodação</label>
<input type="text" id="txtNome" name="venda.acomodacao.numero" value="${venda.acomodacao.numero}" maxlength="255" class="input_text" required="required" />
</p>
<p>
<label for="txtObs">Produto:</label>
<input type="text" id="txtProduto" name="venda.produto.nome" value="${venda.produto.nome}" maxlength="255" class="input_text" required="required" />
</p>
<p>
<label for="txtObs">Desconto:</label>
<input type="text" id="txtDesconto" name="venda.desconto" value="${venda.desconto}" maxlength="255" class="input_text" />
</p>
<p>
<label for="txtObs">Quantidade:</label>
<input type="text" id="txtQuantidade" name="venda.quantidade" value="${venda.quantidade}" maxlength="255" class="input_text" />
</p>
</div>
<div class="divButtons">
<r:buttons delBtn="${not empty venda.id}" msgs="true"/>
</div>
</fieldset>
</form>
<script type="text/javascript">
$("#txtProduto").autocomplete('<c:url value="/cadastros/venda/autocomplete.json"/>', {
dataType: "json", // pra falar que vamos tratar um json
parse: function(produtos) { // para tratar o json
// a função map vai iterar por toda a lista,
// e transformar os dados usando a função passada
return $.map(produtos, function(produto) {
return {
data: produto, // todos os dados do produto
value: produto.id, // o valor lógico do produto
result: produto.nome // o que vai aparecer ao selecionar
};
});
},
formatItem: function(produto) { // o que vai aparecer na lista de autocomplete
return produto.nome + "(" + produto.valorUnitario + ")";
}
});
</script>
Código do método salvar no meu controller:
@Transaction
@Post("/venda/")
public void salvar(Venda venda){
venda.setEmpresaId(userInfo.getEmpresa().getId());
validator.validate(venda);
validator.onErrorRedirectTo(this).index();
vendas.saveOrUpdate(venda);
result.include(SUCCESS, SUCESS_MSG);
result.redirectTo(this).index();
}
O id do produto sempre está null no momento de salvar: venda.produto.id;



