Utilizar o select com onchange

1 resposta
B

Bom dia a todos. Estou com um problema, procurei já pela internet mas os exemplos que encontrei não conseguiram solucionar minha dúvida.
Eu tenho um select de Países, que ao ser selecionado um outro select com Estados é preenchido automaticamente, e ao selecionar o Estado aparecem algumas informações sobre a opção escolhida.
Agora vem a pergunta, como eu faço o onchange pegar uma função definida na classe java e fazer o preenchimento dos selects?

Este é o meu select.
<select name="selPais" class="form-dl left" style="width: 254px;" onchange="">
<option value="0">Selecione</option>
<option value="1">Brasil</option>
<option value="2">Espanha</option>
<option value="3">Estados Unidos</option>
</select>

Como eu faço também para o código do pais receber o valor do select selecionado?

E esta é a função na classe java que o onchange deve retornar.

public List<Representantes> getListaEstados(String inutil) throws Exception {
        Connection conn = BancoDeDados.getConnection();
        this.menuestado = "";
        List<Representantes> Representantes = new ArrayList<Representantes>();
        if (conn != null) {
            PreparedStatement stmt = null;
            ResultSet rs = null;

            try {
                stmt = conn.prepareStatement("select cat_cod, cat_descricao from categorias_conteudos where cat_mae = ?");
                stmt.setInt(1, codpais);
                rs = stmt.executeQuery();

                while (rs.next()) {
                    Representantes r = new Representantes();

                    this.menuestado = this.menuestado + "<option value="+rs.getInt("cat_cod")+">"+rs.getString("cat_descricao")+"</option>";

                    Representantes.add(r);
                }

            } catch (SQLException ex) {
                BancoDeDados.fechaTudo(rs, stmt, conn);
            } finally {
                BancoDeDados.fechaTudo(rs, stmt, conn);
            }
        }
        return Representantes;
    }

Desde já obrigado.

1 Resposta

B

Cara, achu que eu posso te ajudar…

O jeito mais simples que eu achu que tem para fazer utilizando só Servlet e JSP é o seguinte:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//lista de paises
		List<String> paises = new ArrayList<String>();
		paises.add("Brasil");
		paises.add("Espanha");
		paises.add("Estados Unidos");
		request.setAttribute("paises", paises);
		
		String paisString = request.getParameter("pais");
		if(paisString != null){
			request.setAttribute("pais", paisString);
			
			//recupera aqui os estados
			//.getListaEstados(pais);
			List<String> estados = new ArrayList<String>();
			estados.add("São Paulo");
			estados.add("Rio de Janeiro");
			estados.add("Recife");
			request.setAttribute("estados", estados);	
		}
		
		String estadoString = request.getParameter("estado");
		if(estadoString != null){
			//realiza tarefa aqui
			request.setAttribute("estado", estadoString);	
		}
		
		
		RequestDispatcher view = request.getRequestDispatcher("/index.jsp");
		view.forward(request, response);
}

Bom, ai na página, que no caso aqui eu utilizei inde.jsp, você pode fazer assim:

<form action="SelecionarEstadoServlet" name="localizacao_form">
			   <select name="pais" id="pais" class="form-dl left" style="width: 254px;" onchange="javascript: document.forms['localizacao_form'].submit()">
				  <% 
				  	List<String> paises = (List<String>)request.getAttribute("paises");
				  	if(paises != null){
				  		out.write("<option value=''>Selecione</option> ");
				  		for(String p :paises){
				  			out.write("<option value='"+p+"' ");
					  		if(request.getAttribute("pais") != null && request.getAttribute("pais").equals(p))
					  			out.write("selected='selected' ");
					  		out.write(">"+p+"</option>");
				  		}
				  	}
				  %> 
			   </select>  
			   <br/></br>
			   <select name="estado" id="estado" class="form-dl left" style="width: 254px;" onchange="javascript: document.forms['localizacao_form'].submit()">
			   		<% 
				  	List<String> estados = (List<String>)request.getAttribute("estados");
				  	if(estados != null){
				  		out.write("<option value=''>Selecione</option> ");
				  		for(String e:estados){
				  			out.write("<option value='"+e+"' ");
					  		if(request.getAttribute("estado") != null && request.getAttribute("estado").equals(e))
					  			out.write("selected='selected' ");
					  		out.write(">"+e+"</option>");
				  		}
				  	}
				  %> 			   
			   </select>
			   
			   <h2><%= request.getAttribute("estado") != null ? request.getAttribute("estado") : "" %></h2>
		</form>

Sendo a página, index.jsp e o servlet /SelecionarEstadoServlet

Você pode usar JSTL na pagina se você quiser, para não ficar com todo esse código java ai…
Você também pode usar AJAX, sei lá, usando JQuery pra ficar mais fácil…

Abraço
T+

Criado 15 de outubro de 2010
Ultima resposta 15 de out. de 2010
Respostas 1
Participantes 2