Carregar combobox e Usar em outra página [RESOLVIDO]

Pessoal,

Na verdade são duas dúvidas. Uso JSP + SERVLET + BD

Estou trabalhando com iframe, então na verdade uma das páginas será “estática” que será onde terá os menus.

1ª Dúvida:

  • Como faço para deixar um combobox pré carregado com dados do BD?

2ª Dúvida:

  • Existe uma maneira (Javascript ou outro meio) de após ser selecionado esse valor no combobox (na tela principal que não ficará sendo carregada toda hora (refresh)) e usar em outra página como parâmetro?

Por exemplo, abri uma tela dentro do iframe, nesta tela tem um botão de pesquisa, que irei utilizar com um dos parâmetros o valor do combobox, da tela principal que está o iframe. tem como?

Ninguém?

Eu já gerei a lista e está no Servlet.

Só que não carrega ao iniciar a página pq o servlet que eu aponto está como POST.

SERVLET:

[code] protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

	PgpmDAO dao = new PgpmDAO();
		
	// INFORMAÇÕES DOS ERROS DO PROCESSAMENTO
	List<ListaVeiculo> veiculos = dao.listaVeiculos();
	request.setAttribute("veiculo", veiculos);
	
	// ENVIA PARA A TELA DE RESULTADO
	request.getRequestDispatcher("3.jsp").forward(request, response);
	
}[/code]

JSP:

<h3>VE&Iacute;CULO</h3> <div id="comboVeiculo"> <select name="veiculo" style="width:263px;"> <option value="0">SELECIONE</option> <c:forEach var="veiculos" items="${veiculo}"> <option value="${veiculo}"> ${veiculo}</option> </c:forEach> </select> </div>

Mas não é esse servlet, eu separei, pq tem um do form (submit) para enviar para uma tela de pesquisa, eu separei pq acho que tem que carregar o servlet antes da jsp correto? como?

Preencher a combo blz:

http://www.guj.com.br/java/309219-preencher-combobox-jsp--jstl--bd#1644335

Mas queria saber como pego esse valor setado em uma jsp e usar em outra jsp…

É assim, está setado na tela principal que ficará sem recarregar, ao clicar em um item do menu, ao abrir a página, a página consulta o campo que está selecionado e usa o valor…

Tem como?

Salva na sessão e recupera no outro servlet.

oi Erick, o problema é como deixa-lo em sessão sem um submit?

pois é um combo, selecionei ele e como vou deixar ele em session?

Tentei usar esse primeiro exemplo de jquery:
http://api.jquery.com/val/

function displayVals() {

	  var gramaSeleionada = $('#selecionado :selected').text();
	  
	  $( "p" ).html( "<b>gramaSeleionada:</b> " + gramaSeleionada);
	}

	$( "select" ).change( displayVals );
	displayVals();

Assim pego o valor na hora, funciona, mas tem alguma manha de setar no servlet pelo javascript e ficar pegando de outras jsp?

Coloca o combobox dentro de um form. Sempre que o valor alterar, você envia o form e não atualiza a página. No método que você pega form enviado, você salva o item na sessão e depois recupera no outro servlet.

Deve ter alguma forma melhor de fazer isso, mas acho que é a mais simples.

Entendi…

Eu pensei em algo do tipo… setar o valor via javascript (do jeito que tá, mas setando o valor) ai nas páginas que eu precisar eu pego o valor na session… o que acha?

Pq tentei colocar o form no combo mas ele entra em conflito com o form principal e mesmo usando o this, não funciona

Coloca em forms separados. Você pode deixar o form no fim da página com um input hidden. Quando o usuário alterar o valor do combobox, você altera o valor desse input e envia o form.

Entendi…

Mas consegui com ajax…:

function displayVals() {

	  var gramaSelecionada = $('#selecionado :selected').text();

	  $.ajax({
	        type: 'POST',
	        url: 'ServletGrama,
	        data: {
	            grama:gramaSelecionada
	        },
	        beforeSend:function(){
	            // this is where we append usually a loading image
	        },
	        success:function(data){
	            // successful request; do something with the data
	            $('#output').html(data);

	        },
	        error:function(){
	            // failed request; give feedback to user
	        }
	    });
 
  
	}

	$( "select" ).change( displayVals );
	displayVals();

No Servlet:

[code] protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“application/json”);
String grama = request.getParameter(“grama”);
request.setAttribute(“grama”, grama);
System.out.println(grama);

}[/code]

Só que tentei chamar ele em outra JSP assim:

Mas está vazio… vc tem alguma dica?

Ele está imprimindo?

E para salvar na sessão, você precisa pega-la no request:

Oi Erick,

No Servlet ele imprime… mas não na jsp…

SERVLET:

request.getSession().setAttribute("grama", grama);
System.out.println("?" + request.getParameter("grama"));

No Jsp tentei de várias maneiras mas não vai…

<div>Grama:<% request.getSession().getAttribute("grama");%></div>

O código parece certo. Qual o “caminho” que você está fazendo? Altera o combox(que envia o form ao fazer isso) e depois vai na outra página?

O meu problema é esse…

Não tenho um caminho exato…

é assim, no combobox, ao alterar ele, ele já envia para o servlet para setar o valor na session e depois qualquer outra jsp que eu abra eu chamar a session e pegar o valor.

resumindo:

JSP (com Combo) - Servlet (set atributo) - Qualquer JSP

Cara, parece ser algum problema na sessão. Ele está criando uma nova sempre, talvez.

Faça um teste usando Cookie:

No seu post:

Cookie myCookie =  new Cookie("grama", grama);
response.addCookie(myCookie);

E no JSP:

<%String gramaSelecionada= null; for(Cookie cookie : request.getCookies()){ if("grama".equals(cookie.getName())){ gramaSelecionada= cookie.getValue(); } } out.println(gramaSelecionada);%>

É uma gambiarra feia, mas veja se funciona.

Oi Erick, funcionou assim… muito obrigado mesmo pela ajuda…

Tentei mudar o nome da varíavel grama para ver se não era isso. Mas não deu certo.

Vou deixar do seu jeito, não sei se é o melhor, mas funcionou. Muito obrigado pela atenção e a paciência

Que nada cara, de boa.

Acho que o problema da sessão é porque tem que fazer request.getSession(true); para ele criar uma caso não exista. Veja isso depois, se quiser.

Oi Erick, tentei mas não deu não… deve ser algo bem besta, pq essas coisas que sempre tiram a paciência rsrs…

Tem algo a ver de estar no POST e ter algo no GET do Servlet?