@Lucas_Camara seria isso mesmo que você postou. Estou bem enrolado no javascript.
Quando digito a url:
http://localhost:8084/fruteira/quitanda/busca.json?q=man
Recebo isso que é oque quero:
[{"cod": 3,"nomeFruta": "Manga"}]
Estou usando a função abaixo, e pelo que entendi, quando o usuário começa a digitar no input com id: #nome_fruta, no segundo caractere deveria aparecer uma lista com os nomes de frutas encontrados e ao ser selecionado um, o ID dessa fruta tem que preencher o value do input de nome:#quitandaFrutaCod …
Abaixo, deixo a função JS, o controller e o DAO pra verem se está correto e como posso resolver essa questão.
$('#nome_fruta').autocomplete({
source: function(request, response){
$.ajax({
url: '<c:url value="/fruta/busca.json"/>', // URL
type: 'get',
data: {
q: $.trim(request.term) //
},
success: function(data) {
response($.map(fruta, function(item) {
return {
label: item.nome,
value: item.nomeFruta,
fruta: item
};
}));
}
});
},
select: function(event, ui) {
$("#quitandaFrutaCod").val(ui.item.fruta.cod);
},
minLength: 2,
open: function() {
var data = $(this).data('autocomplete');
data.menu.element.find('a').each(function () {
var self = $(this);
var keywords = $.trim(data.term).replace(/^(\*)/g, '').replace(/\s/g, '\\ ');
if (keywords.length > 0)
self.html(self.text().replace(new RegExp('(' + keywords + ')(.*)', 'gi'), '<b>$1</b>$2'));
});
}
);
Alterei um pouco o controller:
@Get("/fruta/busca.json")
public void buscaJson(String q) {
result.use(json()).withoutRoot().from(daoFactory.getFrutaDao().busca(q))
.exclude("peso")
.serialize();
}
E meu DAO:
public List<Fruta> busca(String q) {
return session.createCriteria(Fruta.class)
.add(Restrictions.ilike("nomeFruta", q, MatchMode.ANYWHERE))
.list();
}