[resolvido] socorro foward()!

16 respostas
celox

:shock: iae galerão!

socorro ae pessoal! estou tentando chamar uma JSP a partir do meu SERVLET e olha a merda que acontece:

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

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

acredito q seja na foward() aqui ó:

try {
				
				request.setAttribute("campanhas", modelcam.modelSeaCampanha(dtocam));
				RequestDispatcher r = request.getRequestDispatcher("/JSP/sucessoSeaCampanha.jsp");
				r.forward(request, response);
			} catch (Exception e) {
				RequestDispatcher r = request.getRequestDispatcher("/JSP/falhaSeaCampanha.jsp");
				r.forward(request, response);
			}

na hora do DEBUG ele passa tudo! na hora que eu executo o FOWARD();

:evil:

da erro

iae galerão!? :?

16 Respostas

vanzella

o meu irmão é só ler o erro:

java.sql.SQLException: Parameter index out of range (8 > number of parameters, which is 1).

vc ta passando a quantidade de indices errados, isso é erro de banco, olha lá “SQLException”

phmjunior

posta teu select para vermos o erro.

celox

Esse é o código da minha DAO que da um select no Banco:

public ArrayList<DTOcampanha> daoSeaCampanha(DTOcampanha cam) throws SQLException {
		
		try {
			DTOcampanha dto =  new DTOcampanha();
			ArrayList<DTOcampanha> Lcampanhas = new ArrayList<DTOcampanha>() ;
			
			ResultSet rs = null;

			pstmt = connection.prepareStatement(
					"select nome, beneficiado from campanhas where email = ? ");
			pstmt.setString(1, cam.getEmail());
			
			rs = pstmt.executeQuery();
			
            while (rs.next()) {
            	
            	dto.setNome(rs.getString("nome"));
            	dto.setBeneficiado(rs.getString("beneficiado"));

            	Lcampanhas.add(dto);
            }
			connection.commit();
			return Lcampanhas;
		}			
		catch (SQLException sqle) {
			connection.rollback();
		      throw new SQLException(sqle);
			}

	}

ainda nao entendi essa questao de que meu select ta errado :S

no mysql console eu fiz o select da mesma forma

phmjunior

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 = ? "

no mais até mais.

vanzella

não deve ser essa metodo que ta dando erro, posta o erro todo pra identificar a classe e o método.

celox

esses sao os caras do Java! ae o erro todo!!!

AE GALERA minha classes pra vcs entenderem!

1º o servlet

DTOcampanha cam = new DTOcampanha();
                                 DTOcampanha dtocam = new DTOcamapnha();
                                 ModelCampanha modelcam = new ModelCampanha();
                                 [...]

case 5: // DISPARAR
//acima eu declarei!:
		{
			try {
				dtocam.setEmail(request.getParameter("email"));
				cam = modelcam.modelDispCampanha(dtocam);
				request.setAttribute("disparar", cam );
				RequestDispatcher r = request.getRequestDispatcher("/JSP/sucessoDispCampanha.jsp");
				r.forward(request, response);
			} catch (Exception e) {
				RequestDispatcher r = request.getRequestDispatcher("/JSP/falhaDispCampanha.jsp");
				r.forward(request, response);
			}
		}
		}
		
	}

2º a minah DTO que GUARDA os dados…

public class DTOcampanha {
	
	private String nome;
	private String requisicao;
	private String sangue;
	private String rh;
	private String beneficiado;
	private String mensagem;
	private String email;
[...] COM SEUS CORRESPONDENTES GETS E SETS, gerados pelos eclipse ainda.
code -> gettters and setters

3º minha MODEL

package classesJava;

import java.awt.List;
import java.sql.SQLException;
import java.util.ArrayList;

public class ModelCampanha {
	public ArrayList modelSeaCampanha(DTOcampanha cam) throws SQLException {
		
		
		return  daocam.daoSeaCampanha(cam);
		
	}
} // RESUMINDO A CLASSE NEH!

e a DAO, que insere no Banco de devolve pra SERVLET!!

public ArrayList<DTOcampanha> daoSeaCampanha(DTOcampanha cam) throws SQLException {
		
		try {
			DTOcampanha dto =  new DTOcampanha();
			ArrayList<DTOcampanha> Lcampanhas = new ArrayList<DTOcampanha>() ;
			
			ResultSet rs = null;

			pstmt = connection.prepareStatement(
					"select nome, beneficiado from campanhas where email = ? ");
			pstmt.setString(1, cam.getEmail());
			
			rs = pstmt.executeQuery();
			
            while (rs.next()) {
            	
            	dto.setNome(rs.getString("nome"));
            	dto.setBeneficiado(rs.getString("beneficiado"));

            	Lcampanhas.add(dto);
            }
			connection.commit();
			return Lcampanhas;
		}			
		catch (SQLException sqle) {
			connection.rollback();
		      throw new SQLException(sqle);
			}
	}
}

GALERA É COISA DEMAIS! MAS É PRA MONOGRAFIA… da essa força ae! =]

aguardo!

celox

QUERO SABER QUE PORRA É ESSA:

java.lang.IllegalStateException: Cannot forward after response has been committed

:evil: :evil: :evil: :evil: :evil:

paulofernandesjr

java.lang.IllegalStateException ocorre quando você tenta passar um parametro que o metodo não suporta

reveja o contexto do seu código

até onde eu sei, você só pode dar um foward no final do seu método

RequestDispatcher r = request.getRequestDispatcher("/JSP/sucessoDispCampanha.jsp"); r.forward(request, response);

dentro do switch acho que não permite, pois o compilador não sabe se tem alguma coisa

diferente do return que encerra o método

abraço

celox

hmmm, acho entendi…

mas mesmo sendo tratado no try catch???

porra, quer dizer que não posso usar tantos fowards… entao essa metodologia é muito ruim cara… isso mesmo?

porra… agora pelo visto terei q fazer UM SERVLET pra CADA AÇÃO do caso de uso…

mas q porra…

alguem sabe de uma solução melhor?

paulofernandesjr

defina variaveis

por exemplo

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);     
}

entendeu?

celox

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

paulofernandesjr

do jeto que está fazendo o seu código está errado

pesquise como funcione a instrução switch, mas basicamente é assim

se o valor de op for 1 ele vai entrar em todos os case, tenta colocar um break em cada case, como te mandei no exemplo

espero que dê certo

abraço

Masami

axei teu codigo meio bagunçado,

melhorando um pouco:

String url = "";

        try {

            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)) {
                        url = "/JSP/sucessoAddCampanha.jsp";
                    } else {
                        url = "/JSP/falhaAddCampanha.jsp";
                    }
                    break;

                case 2: // ALTERAR  

                    dtocam.setEmail(req.getParameter("email"));

                    if (modelcam.modelAltCampanha(dtocam)) {
                        url = "/JSP/sucessoAltCampanha.jsp";
                    } else {
                        url = "/JSP/falhaAltCampanha.jsp";
                    }
                    break;

                case 3: // DELETAR  

                    dtocam.setEmail(req.getParameter("email"));

                    if (modelcam.modelDelCampanha(dtocam)) {
                        url = "/JSP/sucessoDelCampanha.jsp";
                    } else {
                        url = "/JSP/falhaDelCampanha.jsp";
                    }
                    break;

                case 4: // SEARCH                     

                    url = "/JSP/falhaSeaCampanha.jsp";
                    //dtocam.setEmail(request.getParameter("email"));  
                    req.setAttribute("campanhas", modelcam.modelSeaCampanha(dtocam));
                    url = "/JSP/sucessoSeaCampanha.jsp";
                    break;

                case 5: // DISPARAR  

                    url = "/JSP/falhaDispCampanha.jsp";
                    dtocam.setEmail(req.getParameter("email"));
                    req.setAttribute("disparar", modelcam.modelDispCampanha(dtocam));
                    url = "/JSP/sucessoDispCampanha.jsp";
                    break;
            }
        } catch (Exception e) {
            throw new ServletException(e);
        } finally {
            RequestDispatcher r = req.getRequestDispatcher(url);
            r.forward(req, res);
        }

veja se funciona ai

celox

puuuts!

ja estarei corrigindo!

esá faltando todos os BREAKS oO

xo ver aki galerão!

celox

booa galera,

apesar do grande problema que estava ocorrendo tudo era um erro de sintaxe ridículo -_-

conforme meus colegas me falaram ae eu não estava colocando o BREAk; !!!

vlw ae a todos vcs!

terei q usar o forward() porque eu preciso passar parametros pra outra page invés de só redirecionar…

mas é isso ae galera! amo vcs :smiley: hauhauha

Valter_Henrique

paulofernandesjr:
java.lang.IllegalStateException ocorre quando você tenta passar um parametro que o metodo não suporta

reveja o contexto do seu código

até onde eu sei, você só pode dar um foward no final do seu método

RequestDispatcher r = request.getRequestDispatcher("/JSP/sucessoDispCampanha.jsp"); r.forward(request, response);

dentro do switch acho que não permite, pois o compilador não sabe se tem alguma coisa

diferente do return que encerra o método

abraço


Caraca meu velho, valeu demais cara, matou minha dúvida.
Muito obrigado mesmo.

VALEU GUJ, VOCÊS SÃO DEMAIS!

Criado 23 de outubro de 2009
Ultima resposta 5 de dez. de 2010
Respostas 16
Participantes 6