Bom dia pessoal,
Eu preciso fazer um combo do mesmo exemplo a seguir:
Um 1º combo com todos os estados do brasil, de acordo com o usuario escolhe o estado, vou ter que carregar num segundo combo todas as cidades disponiveis daquele estado.
Alguem poderia me ajudar ?
O combo eu ja estou montando com JSTL, o que eu não sei é como carregar o segundo combo com a lista de cidades do estado escolhido?
eu não gostaria de usar AJAX, gostaria de alguma coisa bem mais simples, por exemplo uma Taglib
Então use JSTL e Javascript
1 - Carregue a primeira combo com os estados, crie um método que retorne uma lista para que possa iterar no JSP com JSTL assim:
<select class="frmCmb1" name="uf" onChange="obterCidades">
<option value="0">..selecione..</option>
<c:forEach var="uf" items="${uf}">
<option value="${uf.codigo}" <c:if test="${campos.uf == uf.codigo}"> selected</c:if>>${uf.descricao}</option>
</c:forEach>
</select>
2 - Note que no evento onChange da combo eu chamo uma função javascript que deve submeter seu form passando o codigo da uf para ser obtida na Servlet
function obterCidades(){
document.forms[0].acao.value="filtrar";
document.forms[0].action="nomeServlet";
document.forms[0].submit();
}
3 Pegue esse código da uf em sua Servlet ou controller, passe para um método que lista as cidades, que deve ter no WHERE da query esse código e devolva essa lista para o JSP e faça a iteração
<select class="frmCmb1" name="cidade">
<option value="0">..selecione..</option>
<c:forEach var="cidade" items="${cidade}">
<option value="${cidade.codigo}">${cidade.descricao}</option>
</c:forEach>
</select>
você poderia me mostrar como vc fez a sua Servlet ?
Uma servlet comum:
public class ControllerAction extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)throws IOException,ServletException{
String target = "";
String acao = request.getParameter("acao");
String msg = "";
System.out.println("acao " + acao);
try{
if(acao.equals("filtrar")){
ClasseDAO teste = new ClasseDAO()
request.setAttribute("uf",teste.getEstados());
//passo o codigo da uf p/ metodo getCiades via request
request.setAttribute("cidades",teste.getCidades (Integer.parseInt(request.getParameter("uf")));
target = "/Pagina.jsp";
}
//aqui podem ter outras acções
RequestDispatcher rd = request.getRequestDispatcher(target);
rd.forward(request,response);
}catch(Exception e){
e.printStackTrace();
target = "/erro.jsp?erro="+ e.getMessage();
RequestDispatcher rd = request.getRequestDispatcher(target);
rd.forward(request,response);
}
}
}
Obs crie um campo hidden acao no seu jsp.
[quote=Pedrosa]Então use JSTL e Javascript
1 - Carregue a primeira combo com os estados, crie um método que retorne uma lista para que possa iterar no JSP com JSTL assim:
[code]
..selecione..
<option value="${uf.codigo}" selected>${uf.descricao}
[/code][/quote]
Poderia me explicar melhor esse trexo
<option value="${uf.codigo}" <c:if test="${campos.uf == uf.codigo}"> selected</c:if>>${uf.descricao}</option>Eu sei que é pro comobo ser selecionado, mas nao entendo da onde vc tirou o “test” e o “campos.uf”
Pedrosa
Novembro 29, 2007, 4:55pm
#8
[quote=Pedrosa]É a sintaxe do if do jstl de uma olhada na especificação:
http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html[/quote]
sim a sintaxe eu to entendendo, mas continuo boiando de onde vc tirou o "campos.uf
Pedrosa
Novembro 29, 2007, 5:37pm
#10
Foi digitado errado, o certo seria uma variavel que represente o valor do request comparando com o valor do lista.
No meu caso a variavel que ta vindo do servlet é de nome “Numeroblocos”, como eu faria pra usar ela ali pra poder comprar?
Pedrosa
Novembro 29, 2007, 6:36pm
#12
Simples, guarde o valor no request da primeira combo e passe junto con sua lista.
int codigoCidade= 0;try {codigoCidade= Integer.parseInt(request.getParameter("cidade"));} catch (Exception e){}
request.setAttribute("codigoCidade",codigoCidade);
request.setAttribute("lista", new Obj.suaLista(codigoCidade));
[quote=Pedrosa]Simples, guarde o valor no request da primeira combo e passe junto con sua lista.
[code]
int codigoCidade= 0;try {codigoCidade= Integer.parseInt(request.getParameter(“cidade”));} catch (Exception e){}
request.setAttribute(“codigoCidade”,codigoCidade);
request.setAttribute(“lista”, new Obj.suaLista(codigoCidade));
[/code][/quote]
passar ela do servlet pra tela eu consigo, o que eu não consigo é receber a variável com jstl. pois conheço pouco a linhagem.
Pedrosa
Novembro 30, 2007, 10:22am
#14
No JSP ${suaVariavel}, simples assim!
valeu brigadão me ajudou em muita coisa :arrow: