VRaptor3 - jquery.autocomplete enviar codigo

estou usando o jquery.autocomplete.js (no VRaptor) e estou com o seuguinte problema, faço a busca pela descrição da tudo certo mas preciso salvar o codigo visto que é um relacionamento, segue o codigo:

Nacionalidade:

alguem teria uma sugestão de como posso fazer para na hora de salvar salvar o código?, eu até retorno o código no value da funcion acima.

não use abreviações nas suas classes… o código fica horrível pra ler depois…

se o seu formulário está indo pra uma lógica parecida com:

public void adiciona(CndEstagio cndEstagio) {...}

e o relacionamento é:

public class CndEstagio {
    private NcnCodigo ncnCodigo;
    //getter e setter
}
public class NcnCodigo {
    private Long ncnCodigo;
    //getter e setter
}

vc pode chamar o seu input de “cndEstagio.ncnCodigo.ncnCodigo” que o valor vai ser setado corretamente… os getters e setters são importantes…

mas de novo: não use abreviações! O Eclipse, o netbeans, o Idea, qualquer IDE decente de java consegue completar o nome dos métodos e das classes pra vc, vc pode colocar nomes grandes, pois vc só vai digitá-los uma vez!

a segunda classe é:

public class Nacionalidade {
private Long ncnCodigo;
private String ncnDescricao;
//getter e setter
}
o AutoComplete é feito pela descrição, mas preciso setar o código. Se eu colocar o result como codigo vai aparecer para o usuario o código, o que fica confuso!
Quanto as abreviações, gerei o esquema pelo banco, só se eu anotar todos os atributos, o que você sugere?

E agradeço muito a ajuda!!

[quote=melloelton]
Quanto as abreviações, gerei o esquema pelo banco, só se eu anotar todos os atributos, o que você sugere?[/quote]
acho que é melhor você anotar nas entidades uma vez, do que usar essas abreviações pelo sistema inteiro

qto ao plugin do auto complete, dá pra vc fazer ele criar um input hidden com o valor que vc quer mandar pra lógica…
daí vc soh ignora o nome que vai ficar na descrição…

Ae Lucas, mais uma vez agradeço sua colaboração, eu confesso que entendo muito pouco de programação web, estou patinando ainda, mas quanto a sua sugestão do autocomplete perguntei a alguns amigos que entendem mais, e eles também não conseguiram fazer funcionar de forma adequada, na documentação do autocomplete também não tem nada especifico, seria possível você passar um código exemplo de como fazer para enviar o código da nacionalidade (ncnCodigo) para a lógica de forma transparente para o usuário?

grato pela atenção,
Elton.

na página de documentação desse plugin tem uma parte que descreve as options que vc pode passar…

uma delas se eu não me engano eh onSelect, onde vc passa uma função que é executada quando o usuário seleciona algo da lista que aparece…

nessa função vc tem acesso ao valor e a descrição do resultado, daí eh soh atualizar algum input hidden determinado com o valor que vc quer…

Boa Tarde,

Estou tentando usar a dica acima de acionar o onSelect do autocomplete. Modifiquei o script para ficar da seguinte maneira… apenas para teste:

<script type="text/javascript">

                             $("#busca").puts("Busca produtos por nome");
                            
                            $("#busca").autocomplete('<c:url value="/produtos/busca.json"/>', {
                                  dataType: "json", // pra falar que vamos tratar um json
                                    // a função map vai iterar por toda a lista,
                                    // e transformar os dados usando a função passada

                                      parse: function(json) { // 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(json.list, 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;
                                  },
                                  onSelect: function(){
                                      alert("ok");
                                  }
                                 
                                  

                            
                             } );
                             

                          </script>

vi a forma de uso neste link: http://www.devbridge.com/projects/autocomplete/jquery/
mas ao carregar o sistema (tomcat6) e selecionar algum produto, não é lançado o evento(?), ou seja, o alerta “OK”.

Sabem onde devo colocar o onSelect?

dá um alert no parse, e vê se tá chegando o json do jeito certo…

Lucas,
Primeiramente obrigado pela rápida resposta.

o parse está funcionando.

O que desejo fazer é igual ao que o melloelton estava fazendo ou tentando… Ou seja, apos selecionar algo no autocomplete preencher um outro campo de texto. - Por isso aproveitei o tópico…

Mas o evento (não sei se é este o nome) onSelect do autocomplete não está disparando.

Vi este exemplo http://view.jquery.com/trunk/plugins/autocomplete/demo/
No campo Single Bird (remote) este efeito (preencher outro campo) é usado, porém a pagina parece utilizar php…

php é no servidor, não tem a ver com a página no cliente…

tenta ver na documentação do plugin quais métodos vc pode configurar…

um deles é esse evento, não sei se é o onSelect mesmo

Lucas,

A documentação cita o seguinte comando:

	$("#busca").result(function(event, data, formatted) {
		if (data)
                alert("OK: " + data[1]);
        })

mas ao executar ele retorna “undefined”

link do demo: http://view.jquery.com/trunk/plugins/autocomplete/demo/

Percebi que o exemplo da apostila da Caelum trata o JSON. Saberia se isto tem algo a ver?

Se você tiver tempo, veja esta parte da documentação: http://jqueryui.com/demos/autocomplete/#remote-jsonp

Tentei atualizar o plugin do jquery mais ai o auto completar não funciona.

o exemplo da caelum trata o json pq o json que o autocomplete espera é diferente do que o VRaptor gera por padrão…

tenta fazer exatamente como está na apostila, deveria funcionar. Qdo tiver tudo funcionando, mude para o que fizer sentido pro seu sistema.

Vou deixar registrado a solução para o problema…

1o) Modifiquei o autocomplete para o que está neste link: http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
:arrow: É a versão antiga do plugin… mas é a que funcionou

Nele existe dois “demo”. Um é sobre json.

Em resumo:

  1. atualizar (copias para a pasta de scripts da sua aplicação) o script jquery.autocomplete.js

  2. Idem para o jquery.js (para usar a mesma versão suportada pelo plugin)

  3. atalizar o cabeçalho da pagina header.jspf

  4. adicionar o seguinte código no formulário… o gancho está na parte final:

 $("#busca").autocomplete('&lt;c:url value="/produtos/busca.json"/&gt;', {
                                  dataType: "json", // pra falar que vamos tratar um json
                                    // a função map vai iterar por toda a lista,
                                    // e transformar os dados usando a função passada

                                      parse: function(json) { // 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(json.list, 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.id;
                                  }
                           }).result(function(e, produto) {
                                 $("#nomeDoComponenteOndeQueroColocar").val(produto.id);
                            });

o valor do id do produto será colocado no campo escolhido… (Alias, poderia ser qualquer valor que venha com o json

ATENÇÃO: sou completamente novato em scrips, web, java… Assim use a dica acima por sua conta e risco…

Na dúvida, como bem sugeriu o Lucas, consulte a documentação… Demora… mas solução existe! rsrsrsrs