Olá, estou há 3 dias tentando resolver essa tarefa, busquei varios exemplos, mas sem sucesso.
Quando digito qualquer carácter, a requisação chega até o controller do spring, pois joguei um Syso e os resultados são mostrados corretamente no console do eclipse, mas a resposta não chega até a página.
Só pra teste, fiz um array como esse abaixo, e passei pra propriedade source:
var flowers = [{label: "Astor (Purple)", value: "Astor"},
{label: "Daffodil (White)", value: "Daffodil"},
{label: "Rose (Pink)", value: "Rose"},
{label: "Peony (Pink)", value: "Peony"}]
Aí o autocomplete funciona, então o problema, creio eu, deve está entre o controller e o jsp que não recebe a resposta.
Eis o script:
$(function() {
$("#filmePesq").autocomplete({
source : function(request, response) {
$.ajax({
datatype : "json",
data : {
name : request.term
},
url : '${pageContext.request.contextPath}/get_filme_list'
});
var results = $.map(data.filmes, function(filme) {
return {
label: filme.nome
};
});
response(results);
},
minLength: 1,
open: function() {
$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
});
E o controller :
@RequestMapping(value = "get_filme_list", method = RequestMethod.GET)
@ResponseBody
public Map<String, List<Filme>> getFilmes( @RequestParam String name) {
List<Filme> filmes = this.filmeDAO.getFilmesByName(name);
Map<String, List<Filme>> map = new HashMap<String, List<Filme>>();
map.put("filmes", filmes);
for (Filme filme : filmes) {
System.out.println(filme.getNome());
}
return map;
}
Ah, nunca trabalhei com json, to usando essas 3 libs:
jackson-core-2.0.5-javadoc.jar
jackson-annotations-2.0.4.jar
jackson-databind-2.0.4.jar