Problema ajax

2 respostas
kaahxd

Bem pessoal, como não encontrei nenhum exemplo com java, decidi tentar "converter" um método que achei usando php para o java.

Queria apenas completar as cidades ao selecionar o estado, segue o código

Página já listando os estados.

<html>
<c:url value="/resources/" var="js" />
<head>
<script type="text/javascript" src="${js}/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$("select[name=estado]").change(function(){
		$("select[name=cidade]").html('<option value="">Carregando cidades...</option>');
		
		$.post("completa",
				{estado:$("select[name=estado]").val()},
				function(valor){
					$("select[name=cidade]").html(valor);
				});
	});
});
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Auto preenchimento</title>
</head>
<body>
	<select name="estado" id="estado">
		<option>&nbsp;</option>
		<c:forEach var="estado" items="${dao.lista}">
			<option value="${estado.id}">${estado.estado}</option>
		</c:forEach>
	</select>
	<select name="cidade" id="cidade">
		<option value="">Selecione o estado primeiro</option>
	</select> 
	<input type="text" name="descricao"><br/><br/><hr>
	
	<a href="cadastroEstados">Cadastre seus próprios estados</a><br /><br />
	<a href="cadastroCidades">Cadastre cidades para seus estados</a>
</body>
</html>
Código "completa" que na verdade chama uma .jsp
<%@ page contentType="text/xml"%>
<%@ page import="br.com.dao.*, br.com.infra.*, br.com.teste.*, java.util.*" %>
<%
CidadesDAO dao = new CidadesDAO();
List<Cidades> lista = dao.getLista();

String e = request.getParameter("estado");
Integer estado = new Integer(Integer.parseInt(e));

for(Cidades cidade:lista){
	//if(cidade.getEstado().getId() == estado){ %>	
		<option><%=cidade.getCidade()%></option>	
<%
	//}
}
%>

Quando seleciono um estado, aparece Carregando e fica em branco! Alguém tem uma ideia de por que o ajax não está retornando a lista com as cidades referentes ao estado?

Obrigado!

2 Respostas

Vini_Fernandes

Cara, nao recomendo utilizar um .jsp para tratar seu request, mas sim, um servlet para tratar a requisicao e devolver o resultado para a camada de apresentacao .jsp. Na comunicacao entre essas camadas eu utilizaria um padrao JSON para o trafego de informacoes. Veja um exemplo:

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;




public class MeuServlet extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


        try {
            
            response.setContentType("text/json;charset=UTF-8");

            Lista<Cidade> listaCidade = recuperarCidadePorEstado(estado);

            //TODO: MONTAR UM LACO PARA RECUPERAR O NOME DAS CIDADES E DEVOLVER A STRING NO PADRAO JSON COMO ABAIXO            
            String json = "{cidades:[{nome: \"campinas\"}, {nome: \"sorocaba\"}, {nome: \"diadema\"}]}";
            
            
            response.getWriter().write(json);
            response.getWriter().flush();

        } catch (Exception ex) {

            throw new ServletException("Nao foi possivel recuperar as cidades.", ex);
        }
    }


}
kaahxd

Cara, eu não conheço Json, mudaria algo no meu JavaScript?

Obrigado!

Criado 21 de setembro de 2012
Ultima resposta 21 de set. de 2012
Respostas 2
Participantes 2