Estou querendo popular uma combobox, mas o meu problema que não sei quando chamar o servlet (e como neste caso)
tenho a lista já pega no BD e enviada para o Servlet:
PgDAO dao = new PgDAO();
// INFORMAÇÕES DOS ERROS DO PROCESSAMENTO
List<ListaPg> gramas = dao.listaPg();
request.setAttribute("grama", gramas);
// ENVIA PARA A TELA DE RESULTADO
request.getRequestDispatcher("index.jsp").forward(request, response);
Se você colocar na Servlet validar login você não pode fazer redirect para o index, afinal vc colocou a list na request e no redirect vai ser feita outra request e a lista não vai estar la.
Se você colocar no validar login precisa fazer forward para o index (o que não é la muito bom, afinal o valida login provavelmente é POST).
Você pode usar outro Escopo pra colocar a List (o ideal seria o escopo Flash, que dura até a próxima request)
Ou usar o JQuery para que depois do html do index ser lido ele faça uma requisição ajax para a servlet e preencha o combo
Pacato eu uso VRaptor que facilita muito isso que você quer fazer, da uma estudadinha nele vai facilitar pra vc e muito.
Mas o procedimento é: 1. faça uma chamada com ajax à sua servlet, usando jquery :
$(function(){
$.ajax({
url: 'URL_DA_SERVLET',
success: function(data) {
//percorre o JSon de retorno e adiciona os <option> na combo
}
});
});
na sua servlet vc não vai mais adicionar o resultado do banco na request, você vai criar um JSON (nisso aqui o VRaptor facilita muito pra vc, mas em todo caso pode olhar o GSon da Google pra fazer isso)
retorna esse JSON do servidor através do Respose (nisso o Vraptor tmb ajuda pra kct)
o procedimento é mais ou menos esse, mas a parte ali do JQuery vc precisa dar uma estudadinha mesmo, não só no ajax que é simples daquele jeito ali mas também no for para adicionar os OPTION no combo.
Outra forma seria ao invés de devolver JSON, vc retornar o HTML da Pagina ou do Combo e via JQuery trocar o combo que está na página pelo que veio do servidor (mais ou menos como o JSF faz)
Cara não funcionou oq?
Não preencheu o combo, nao carregou a tela, sua tag jstl está funcionando?
Outra coisa de um print nessa List gramas = dao.listaPg(); e veja se tem dados dentro.
Continue testando, ao entrar na index.jsp coloque ${grama} somente e veja oq printa…
Oi Edu, eu não disse que não tinha funcionado, eu disse que vou dar uma estudada e fazer uns testes e caso positivo ou negativo ou retorno com o resultado ou dúvida
Estou tentando ver até algum JS que me ajude… to enroscado nessa tranqueira… estou vendo as tecnologias que o Rafael e o Edu me passaram tbm mas ta tenso… o pior é prazo mesmo…
O Pior é que o Servlet está funcionando como a lista tbm… mas o caso é que preciso carregar quando abre a página.
Outro problema que está vinculado é que se ele abre quando uso o request dispatcher, ele abre a tela toda dentro o iframe…
Não sei mais o que tentar… O problema é este iframe, que se eu dou o requestDispatcher, ele não abre direito e ainda por cima a url fica o endereço do servlet e não o da página principal…