Preencher combobox JSP + JSTL + BD [RESOLVIDO]

12 respostas
P

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

12 Respostas

R

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

P

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

R

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)

P

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

E

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.

P

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

P

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

E

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

P

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…

P

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

E isso aqui?

P

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.

Criado 2 de setembro de 2014
Ultima resposta 5 de set. de 2014
Respostas 12
Participantes 4