socorro ae pessoal! estou tentando chamar uma JSP a partir do meu SERVLET e olha a merda que acontece:
[quote]java.sql.SQLException: Parameter index out of range (8 > number of parameters, which is 1).
23/10/2009 16:45:39 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet ServletCampanha threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed
[/quote]
Adianto aos senhores que debugei o code e ele passa por todas as camadas de boa, passando e recebendo os parametros!!!
o problema ocorre me parece que ocorre antes de entar na JSP!!! POSSO ESTAR ERRADO
o erro java.sql.SQLException diz q vc ta com problemas em uma destas instruções :
Connection
PreparedStatement
ResultSet
e mais outros da lib java.sql.*;
neste teu caso com certeza o erro deve ta em alguma chamada de select ou escrita.
da uma olhada no parenteze de seus selects ou da abertura de chamada deles
ex:
pstmt = connection.prepareStatement(
"select nome, beneficiado from campanhas where email = ? ");
pstmt.setString(1, cam.getEmail());
da uma olhada direitinho q o erro ta por lá, uma vez q a classe só compila quando ta escrita certinha. então o erro deve ta porai.
o teu pstmt deve ser o PreparedStatement ond vc disse q ele se chamaria assim? q nem vc fez com o ResultSet rs = null;
veja também se o nome de usuário usado e o principal se não for use a chamada do select assim:
//veja aqui o nome do esquema da minha base de dados
"select nome, beneficiado from meuesquema.campanhas where email = ? "
String proximaPagina = null;
switch(valor){
case 1:
// faz as coisas
proximaPagina = "/teste/pagina1.jsp";
break;
case 2:
// faz as coisas
proximaPagina = "/teste/pagina2.jsp";
break;
case 3:
// faz as coisas
proximaPagina = "/teste/pagina3.jsp";
break;
default:
// faz as coisas
proximaPagina = "/teste/erro.jsp";
break;
}
if( proximaPagina != null ) {
RequestDispatcher r = request.getRequestDispatcher(proximaPagina);
r.forward(request, response);
}
uai brother! mas pq nao da certo assim? a diferença é q eu nao fiz só uma var dentro de cada case, eu ja chamei o foward(); q bulufas eu n sei nao funciona.
curte ae o code:
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ServletCampanha extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
executaServlet(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
executaServlet(request, response);
}
public void executaServlet(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
int op = 0;
DTOcampanha dtocam = new DTOcampanha();
ArrayList<DTOcampanha> cam = new ArrayList<DTOcampanha>();
ModelCampanha modelcam = new ModelCampanha();
op = Integer.parseInt(req.getParameter("op"));
switch (op) {
case 1: // ADICIONAR
{
dtocam.setNome(req.getParameter("nome"));
dtocam.setBeneficiado(req.getParameter("beneficiado"));
dtocam.setRequisicao(req.getParameter("requisicao"));
dtocam.setRh(req.getParameter("rh"));
dtocam.setMensagem(req.getParameter("mensagem"));
dtocam.setEmail(req.getParameter("email"));
dtocam.setSangue(req.getParameter("sangue"));
if (modelcam.modelAddCampanha(dtocam)) {
RequestDispatcher r = req.getRequestDispatcher("/JSP/sucessoAddCampanha.jsp");
r.forward(req, res);
} else {
RequestDispatcher r = req.getRequestDispatcher("/JSP/falhaAddCampanha.jsp");
r.forward(req, res);
}
}
case 2: // ALTERAR
{
dtocam.setEmail(req.getParameter("email"));
if (modelcam.modelAltCampanha(dtocam)) {
RequestDispatcher r = req.getRequestDispatcher("/JSP/sucessoAltCampanha.jsp");
r.forward(req, res);
} else {
RequestDispatcher r = req.getRequestDispatcher("/JSP/falhaAltCampanha.jsp");
r.forward(req, res);
}
}
case 3: // DELETAR
{
dtocam.setEmail(req.getParameter("email"));
if (modelcam.modelDelCampanha(dtocam)) {
RequestDispatcher r = req.getRequestDispatcher("/JSP/sucessoDelCampanha.jsp");
r.forward(req, res);
} else {
RequestDispatcher r = req.getRequestDispatcher("/JSP/falhaDelCampanha.jsp");
r.forward(req, res);
}
}
case 4: // SEARCH
{
try {
//dtocam.setEmail(request.getParameter("email"));
req.setAttribute("campanhas", modelcam.modelSeaCampanha(dtocam) );
RequestDispatcher r = req.getRequestDispatcher("/JSP/sucessoSeaCampanha.jsp");
r.forward(req, res);
} catch (Exception e) {
RequestDispatcher r = req.getRequestDispatcher("/JSP/falhaSeaCampanha.jsp");
r.forward(req, res);
}
}
case 5: // DISPARAR
{
try {
dtocam.setEmail(req.getParameter("email"));
req.setAttribute("disparar", modelcam.modelDispCampanha(dtocam) );
RequestDispatcher r = req.getRequestDispatcher("/JSP/sucessoDispCampanha.jsp");
r.forward(req, res);
} catch (Exception e) {
RequestDispatcher r = req.getRequestDispatcher("/JSP/falhaDispCampanha.jsp");
r.forward(req, res);
}
}
}
}
}
sacou? eu fazendo com apenas 1 FOWARD da certo… mas com muitos da a exceção