Buenas galera,
Tenho um no meu jsp que lista os estados do país
<label>Estado:</label>
<form action="SrvEstabelecimento?carregaCidade" method="post" name="estadoFrm">
<select>
<c:forEach var="estado" items="${listaEstados}">
<option name="${estado.dom02Id}"><c:out value="${estado.dom02Sigla}" /></option>
</c:forEach>
</select>
<input type="submit" value="Selecionar" />
</form>
Até ai beleza o meu problema é que eu preciso do id do estado para utilizar como parâmetro em um select no banco de dados só que não sei como pegar isso na servlet sendo que o ID é gerado pela EL.
Grato,
[quote=gabriel_nunes]Buenas galera,
Tenho um no meu jsp que lista os estados do país
<label>Estado:</label>
<form action="SrvEstabelecimento?carregaCidade" method="post" name="estadoFrm">
<select>
<c:forEach var="estado" items="${listaEstados}">
<option name="${estado.dom02Id}"><c:out value="${estado.dom02Sigla}" /></option>
</c:forEach>
</select>
<input type="submit" value="Selecionar" />
</form>
Até ai beleza o meu problema é que eu preciso do id do estado para utilizar como parâmetro em um select no banco de dados só que não sei como pegar isso na servlet sendo que o ID é gerado pela EL.
Grato,
[/quote]
Estava faltando o id e name do select, e adicionar o atributo “value” no option.
Tenta assim:
<label>Estado:</label>
<form action="SrvEstabelecimento?carregaCidade" method="post" name="estadoFrm">
<select name="estado" id="estado">
<c:forEach var="estado" items="${listaEstados}">
<option value="${estado.dom02Id}"><c:out value="${estado.dom02Sigla}" /></option>
</c:forEach>
</select>
<input type="submit" value="Selecionar" />
</form>
Na servlet vc faz o request.getParameter(“estado”);
eae orlandogpe vlw pela resposta…
Mas me surgiu outra duvida, o name do select você colocou como “estado” mas é igual ao var do c:forEach é assim mesmo ou devo substituir algum deles?
é assim msm… o estado do var e para voce conseguir acessar cada objeto da lista, e o estado do select é apenas o nome msm.
entendi…
O Que você falou deu certo valeu !
Mas surgiu outro problema, na minha pagina eu tenho 2 um é o estado e o outro o de cidades daquele estado.
Seleciono o estado e clico no submit e da esse erro.
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:500)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:410)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
marhysystem.agenda.servlet.cadastro.estabelecimento.SrvEstabelecimento.service(SrvEstabelecimento.java:45)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>WebAgenda - Selecione o estado, a cidade e o estabelecimento.</title>
</head>
<body>
<h2>WebAgenda</h2>
<h4>Selecione sua localidade.</h4>
<br />
<label>Estado:</label>
<form action="SrvEstabelecimento?carregaCidade" method="post" name="estadoFrm">
<select name="estado" id="estado">
<c:forEach var="estado" items="${listaEstados}">
<option value="${estado.dom02Id}"><c:out value="${estado.dom02Sigla}" /></option>
</c:forEach>
</select>
<input type="submit" value="Selecionar" />
</form>
<br />
<label>Cidade:</label>
<form action="SrvEstabelecimento?carregaEstabelecimento" method="post" name="cidadeFrm">
<select name="cidade" id="cidade">
<c:forEach var="cidade" items="${listaCidade}">
<option value="${cidade.dom03Id}"><c:out value="${cidade.dom03Nome}" /></option>
</c:forEach>
</select>
</form>
<br />
<label>Estabelecimento:</label>
<table>
<tr>
<td>Nome</td>
<td>Telefone</td>
<td>Endereço</td>
</tr>
<c:forEach var="estabelecimento" items="${listaEstabelecimento}">
<tr name="${estabelecimento.idCad001}">
<td>${estabelecimento.c01Fantasia}</td>
<td>${estabelecimento.c01Fone}</td>
<td>${estabelecimento.c01Endereco}</td>
<td>
<a href="SrvEstabelecimento?visualizaAgenda">
<input type="button" value="Visualizar Agenda" />
</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Servlet
package marhysystem.agenda.servlet.cadastro.estabelecimento;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import marhysystem.agenda.bean.cadastro.Ansdom02;
import marhysystem.agenda.bean.cadastro.Ansdom03;
import marhysystem.agenda.dao.cadastro.AnsDom02DAO;
import marhysystem.agenda.dao.cadastro.AnsDom03DAO;
import marhysystem.agenda.dao.cadastro.Tbcad001DAO;
public class SrvEstabelecimento extends HttpServlet {
private static final long serialVersionUID = 1L;
public SrvEstabelecimento() {super();}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String acao = request.getQueryString();
if(acao.equals("carregaEstado")){
AnsDom02DAO estado = new AnsDom02DAO();
request.setAttribute("listaEstados", estado.listarEstados());
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
else if(acao.equals("carregaCidade")){
AnsDom03DAO cidade = new AnsDom03DAO();
int idEstado = Integer.parseInt(request.getParameter("estado"));
cidade.listarCidades(idEstado);
request.setAttribute("listaCidade", cidade);
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
else if(acao.equals("carregaEstabelecimento")){
Tbcad001DAO estabelecimento = new Tbcad001DAO();
Ansdom03 cidade = new Ansdom03();
int idCidade = Integer.parseInt(request.getParameter("idCidade"));
estabelecimento.listarEstabelecimentos(idCidade);
request.setAttribute("listaEstabelecimento", estabelecimento);
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
}
}
Acho q o problema esta na sua servlet.
...
}
else if(acao.equals("carregaCidade")){
AnsDom03DAO cidade = new AnsDom03DAO();
int idEstado = Integer.parseInt(request.getParameter("estado"));
cidade.listarCidades(idEstado);
request.setAttribute("listaCidade", cidade); // Acho q o problema esta aqui, está passando a referencia da variavel cidade, e não a lista de cidades
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
...
Tenta isso:
...
}
else if(acao.equals("carregaCidade")){
AnsDom03DAO cidade = new AnsDom03DAO();
int idEstado = Integer.parseInt(request.getParameter("estado"));
//tenta isso
request.setAttribute("listaCidade", cidade.listarCidades(idEstado)).
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
...
Pelo q vi vc tem q fazer isso no carregaEstabelecimento.
Uma dica… pra nao precisar clicar no botao para carregar a cidade, vc pode colocar o atributo onChange no select.
... <select name="estado" id="estado" onChange="submit()"> ....
putz cara que vacilo meu foi mal…
fiz isso pra carregar o estado mas nao pra cidade…heheh de novo vlw!..
só uma ultima duvida aproveitando o topico…
no caso quando eu peço pra carregar o com as cidades o estado volta a ficar em branco…como posso manter o valor do estado selecionado?
Agradeço a paciencia e a ajuda ate o momento…
Abs
Na sua servlet vc tem q passar um novo atributo.
}
else if(acao.equals("carregaCidade")){
AnsDom03DAO cidade = new AnsDom03DAO();
int idEstado = Integer.parseInt(request.getParameter("estado"));
//será usado para fazer o request na pagina. Obs: passe o atributo com String. Ex: ""+idEstado .
request.setAttribute("idEstado", ""+idEstado);
request.setAttribute("listaCidade", cidade.listarCidades(idEstado));
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
e no seu select do estado fazer o seguinte:
<select name="estado" id="estado">
<c:forEach var="estado" items="${listaEstados}">
<option value="${estado.dom02Id}" ${idEstado.equals(""+estado.dom02Id) ? "selected":""} ><c:out value="${estado.dom02Sigla}" /></option>
</c:forEach>
</select>
ou assim:
<select name="estado" id="estado">
<c:forEach var="estado" items="${listaEstados}">
<option value="${estado.dom02Id}" <% if((""+request.getAttribute("idEstado")).equals(""+estado.dom02Id)) out.print("selected"); %> ><c:out value="${estado.dom02Sigla}" /></option>
</c:forEach>
</select>
funciona dos 2 jeitos
depois no metodo do carregaEstabelecimento, vc tem q passar 2 atributos, idEstado e idCidade, e fazer essa alterção no select da cidade.
Cara num ta dando certo não…tentei aqui de alguns jeitos ate…
else if(acao.equals("carregaCidade")){
AnsDom03DAO cidade = new AnsDom03DAO();
int idEstado = Integer.parseInt(request.getParameter("estado"));
request.setAttribute("idEstado", ""+idEstado);
request.setAttribute("listaCidade", cidade.listarCidades(idEstado));
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
JSP
<select name="estado" id="estado">
<c:forEach var="estado" items="${listaEstados}">
<option value="${estado.dom02Id}" ${idEstado.equals(""+estado.dom02Id) ? "selected":""}><c:out value="${estado.dom02Sigla}" /></option>
</c:forEach>
</select>
org.apache.jasper.JasperException: /estabelecimentos.jsp(19,43) The function equals must be used with a prefix when a default namespace is not specified
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 19 in the jsp file: /estabelecimentos.jsp
estado.dom02Id cannot be resolved to a type
16: <form action="SrvEstabelecimento?carregaCidade" method="post" name="estadoFrm">
17: <select name="estado" id="estado">
18: <c:forEach var="estado" items="${listaEstados}">
19: <option value="${estado.dom02Id}" <% if((""+request.getAttribute("idEstado")).equals(""+estado.dom02Id)) out.print("selected"); %> /></option>
20: </c:forEach>
21: </select>
22: <input type="submit" value="Selecionar" />
Cara, foi mal esse segundo modo nao vai dar certo pq vc ta usando JSTL, ele so daria certo usando scriptlet na hora q montei o exemplo esqueci desse detalhe, foi mal.
Mas a 1º opção era pra funcionar. Ta tudo certo no código, até fiz um teste aqui e funcionou.
a var estado nao funciona só no escopo da onde foi declarado? no caso do c:forEach?
só funciona no escopo do c:forEach
estranho cara nao vai mesmo…tentei colocar o EL dentro de atributo do option mas mesmo assim o erro persiste
vou continuar pesquisando aqui… mas por hora obrigado pela ajuda o/
abs
estranho msm…
Se descobrir algo te dou um toque
abraço
cara consegui depois de kebrar a cuca…
ficou assim
JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>WebAgenda - Selecione o estado, a cidade e o estabelecimento.</title>
</head>
<body>
<h2>WebAgenda</h2>
<h4>Selecione sua localidade.</h4>
<br />
<label>Estado:</label>
<form action="SrvEstabelecimento?carregaCidade" method="post" name="estadoFrm">
<select name="estado" id="estado" onchange="submit()">
<c:forEach var="estado" items="${listaEstados}">
<option value="${estado.dom02Id}"/><c:out value="${estado.dom02Sigla}"/></option>
</c:forEach>
</select>
</form>
<br />
<label>Cidade:</label>
<form action="SrvEstabelecimento?carregaEstabelecimento" method="post" name="cidadeFrm">
<select name="cidade" id="cidade" onchange="submit()">
<c:forEach var="cidade" items="${listaCidade}">
<option value="${cidade.dom03Id}"><c:out value="${cidade.dom03Nome}" /></option>
</c:forEach>
</select>
</form>
<br />
<label>Estabelecimento:</label>
<table>
<tr>
<td>Nome</td>
<td>Telefone</td>
<td>Endereço</td>
</tr>
<c:forEach var="estabelecimento" items="${listaEstabelecimento}">
<tr name="${estabelecimento.idCad001}">
<td>${estabelecimento.c01Fantasia}</td>
<td>${estabelecimento.c01Fone}</td>
<td>${estabelecimento.c01Endereco}</td>
<td>
<a href="SrvEstabelecimento?visualizaAgenda">
<input type="button" value="Visualizar Agenda" />
</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Servlet
package marhysystem.agenda.servlet.cadastro.estabelecimento;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import marhysystem.agenda.bean.cadastro.Ansdom02;
import marhysystem.agenda.bean.cadastro.Ansdom03;
import marhysystem.agenda.dao.cadastro.AnsDom02DAO;
import marhysystem.agenda.dao.cadastro.AnsDom03DAO;
import marhysystem.agenda.dao.cadastro.Tbcad001DAO;
public class SrvEstabelecimento extends HttpServlet {
private static final long serialVersionUID = 1L;
public SrvEstabelecimento() {super();}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String acao = request.getQueryString();
if(acao.equals("carregaEstado")){
AnsDom02DAO estado = new AnsDom02DAO();
request.setAttribute("listaEstados", estado.listarEstados());
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
else if(acao.equals("carregaCidade")){
AnsDom03DAO cidade = new AnsDom03DAO();
AnsDom02DAO estado = new AnsDom02DAO();
int idEstado = Integer.parseInt(request.getParameter("estado"));
String siglaEstado = request.getParameter("siglaEstado");
request.setAttribute("listaEstados", estado.listarEstados()); //A Diferença ta aqui...simplesmente chamei o metodo de listas os estados novamente!
request.setAttribute("listaCidade", cidade.listarCidades(idEstado));
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
else if(acao.equals("carregaEstabelecimento")){
Tbcad001DAO estabelecimento = new Tbcad001DAO();
int idCidade = Integer.parseInt(request.getParameter("cidade"));
request.setAttribute("listaEstabelecimento", estabelecimento.listarEstabelecimentos(idCidade));
request.getRequestDispatcher("estabelecimentos.jsp").forward(request, response);
}
}
}
Não sei se é o correto mas pelo menos consigo trabalhar agora…mais pra frente quando eu estiver com tempo eu procuro melhor o que você havia explicado
mas mto obrigado mesmo pela atenção e ajuda e fica ai a soluçao pra quem tiver um problema parecido
abs