ajax - Autocomplete JSP e JavaScript
Perguntas � ajax � Autocomplete JSP e JavaScript
Autocomplete JSP e JavaScript
Aew galera, to tentando fazer um autocomplete, utilizando uma busca ao banco, fazendo chamada à action através de json. Ele vai lá buscar a lista, mas na hora de voltar na tela, ele fica só com o loading girando, e não mostra a lista com as opções.
Como está a chamada no JavaScript:
$("#item").autocomplete({
source : '/.../listAllOrganizationsAutoComplete?keyword=' + item.toString(),
scrollHeight: 10,
maxHeight: 10,
E no JSP:
<li class="label">Item:</li>
<li><input type="text" autocomplete="on" id="item"></li>
a chamada retorna isso:
"itemCatCode": null,
"nameTxt": "Base Naval de Aratu edit",
"objItemId": 401289,
"updateSeqnr": null
"nameTxt": "Marinha Brasil",
"objItemId": 403777,
Está dando algum erro no console do navegador? Se sim, qual?
— lucastody 11 de jul de 2014
não da errro. Ele não está passando o que digito para a action =/
— leods 11 de jul de 2014
estou pensando em carregar um var com conteudo do banco, e depois buscar nesse var. Mas a questão é que precisaria que fosse var de object, pois mostraria na tela o name do cara, e ao selecionar, e enviar, iria o id daquele name.
Como que é o JSON que essa URL está retornando? E como você está criando esse JSON no backend? (Edite sua pergunta e coloque o JSON para a gente ver e o código do backend também)
estou usando uma query que já existe como exemplo. esse resultado eh de uma function do banco, que traz esses campos. Mas eu utilizaria uma query que pra cada cara ele traria o id e o nome do cara
o problema é que a action não está recebendo o $("#itemAutoComplete").val(), e está retornando tudo, pois da um like em '', e ao retornar, não exibe na telo, por voltar um object com diversas informações
Você não entendeu muito bem minha pergunta. Se você pegar a url: /SIOpWeb/helper/listAllOrganizationsAutoComplete?keyword=1 (o valor 1 para keyword é um exemplo) e colocar no browser, provavelmente, será impresso um JSON na tela. É esse JSON que você tem que avaliar, pois é o valor que será trabalhado na sua tela. O JSON deve ser um array de string, e se você quiser retornar um array de objeto para poder trabalhar com o ID (assim como você explicou), deverá fazer uma requisição antes, pegar o array de objetos, obter a descrição de cada objeto, montar um array de string para jogar no autocomple
E com o array de objetos obtido, você terá o ID de cada registro recuperado com a descrição de cada um também onde poderá trabalhar livremente.
então, aquela resposta que coloquei é a resposta do json: creatorId, locationId... são os campos do objeto que ele retorna. Se eu passar a trazer como falei, somente um object com um int que seria o id e uma string p o nome. Como faço pra receber isso e montar na tela? e o $("#itemAutoComplete").val() também não está enviando nda
Primeiro é bom resolver o problema do parâmetro não ser enviado. Como que você está pegando o parâmetro no servidor?
em /SIOpWeb/helper/listAllOrganizationsAutoComplete?keyword=' + item.toString() o keyword é uma string que recebe do json o que é digitado, daí faz a requisição ao banco. estava tentando enviar colocando o keyword=' + $("#item").val(), quando coloco keyword=teste ele vai. Se eu for no firebug e der o $("#item").val() ele consegue pegar o que estou digitando.
galera, agora estou buscando tudo no banco. Recebo uma lista de uma entidade. Preciso agora, nessa lista, achar o que o cara digitou, exibir o nome, e guardar o id.
— leods 17 de jul de 2014
Galera resolvi. Seguinte, procurando na net, vi que usando um object com id, name e label o plugin do autocomplete consegue se achar, e identificar o id do campo e o que deve exibir na tela. Então criei uma classe e coloquei tais atributos nela. Depois pegava o resultado do banco e jogava em objeto dessa classe. PROBLEMA RESOLVIDO.
$.siopGetJSON('//auditoria/findObjItemJSON',
<li><input type="text" autocomplete="on" id="itemAutoComplete">
<input type="hidden" id="itemAutoCompleteHidden"></li>
public class JsonDTO {
Apenas responda sua própria pergunta se for para colocar a solução, se não for o caso, utilize os comentários.