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

16 respostas
P

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?

16 Respostas

P

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

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?

P

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?

E

Salva na sessão e recupera no outro servlet.

P

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?

E

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.

P

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

E

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.

P

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:

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

}

Só que tentei chamar ele em outra JSP assim:

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

Mas está vazio... vc tem alguma dica?

E

Ele está imprimindo?

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

P

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>
E

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?

P

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

E

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.

P

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

E

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.

P

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?

Criado 26 de agosto de 2014
Ultima resposta 9 de set. de 2014
Respostas 16
Participantes 2