Preencher combobox JSP + JSTL + BD [RESOLVIDO]

Pesseal, blz?

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);

Na JSP:


		<div id="comboGrama">
			<select name="grama" style="width:263px;">
				<option value="0">SELECIONE</option>
					<c:forEach var="gramas" items="${grama}">
						<option value="${gramas.grama}"> ${gramas.grama}</option>
					</c:forEach>
			</select>				
		</div>

Só que não sei quando chamar o servlet…

Minha aplicação está assim:

Tela de Login --> Servlet para Validar Login --> Index.jsp

Não funcionou quando coloquei na Servlet Validar Login, agora não sei como e onde chamar para preencher a lista

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

Oi Rafael, obrigado pelo retorno…

Estou pesquisando sobre Jquery, e vi que é o mais provável para meu caso, ele chamar ao abrir a tela o servlet da lista…

Mas não encontrei nada que realmente me atendesse… vc teria algum exemplo? algum artigo/tutorial? eu agradeceria.

Obrigado mais uma vez

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
     }
   });
});
  1. 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)

  2. 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)

Blz… vou dar uma estudada e ver o que consigo, qualquer coisa retorno o positivo ou negativo… valeu Rafael

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…

Vá fazendo testes, isso é bem básico.

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 :slight_smile:

vou fazer os testes que falou sim, valeu

Vcs sabem algum artigo para esse caso? não achei algo específico para combobox… se tiverem algum link eu agradeço…

Pode ser qualquer tecnologia, a melhor que vcs acham

Já tentou algo do tipo http://stackoverflow.com/questions/14648167/how-to-configure-welcome-file-list-in-web-xml ??

Olá ErickRAR … não funcionou :frowning:

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…

Pessoal… não estou conseguindo de forma alguma…

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…

E isso aqui?

Valeu ErickRAR, eduJava e rafaelbtz…

Consegui com este exemplo:

<div id="comboGrama"> <c:set var="lista" value="${requestScope.listaGrama}" /> <select name="grama" style="width:263px;"> <option value="0">SELECIONE</option> <c:forEach var="listas" items="${lista}"> <option value="${listas.grama}"> ${listas.grama}</option> </c:forEach> </select> </div>

e no servlet não uso o requestDispatcher:

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		PgpmDAO dao = new PgpmDAO();
		

		List<ListaGrama> gramas = dao.listaGramas();
		
		/*	for(int i = 0; i < gramas.size(); i++){
			    System.out.println("AFF" + gramas.get(i));
			
			}*/

		
		request.setAttribute("listaGrama", gramas);
}

Referência:

Não sei se isso tem algum impedimento ou mal funcionamento com alguma outra condição, mas no caso atendeu.