[resolvido] socorro foward()!

:shock: iae galerão!

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

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!? :?

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”

posta teu select para vermos o erro.

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

[code]public ArrayList<DTOcampanha> daoSeaCampanha(DTOcampanha cam) throws SQLException {

	try {
		DTOcampanha dto =  new DTOcampanha();
		ArrayList&lt;DTOcampanha&gt; Lcampanhas = new ArrayList&lt;DTOcampanha&gt;() ;
		
		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);
		}

}

[/code]

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

no mysql console eu fiz o select da mesma forma

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.

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

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(&quot;email&quot;));
				cam = modelcam.modelDispCampanha(dtocam);
				request.setAttribute(&quot;disparar&quot;, cam );
				RequestDispatcher r = request.getRequestDispatcher(&quot;/JSP/sucessoDispCampanha.jsp&quot;);
				r.forward(request, response);
			} catch (Exception e) {
				RequestDispatcher r = request.getRequestDispatcher(&quot;/JSP/falhaDispCampanha.jsp&quot;);
				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 -&gt; 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&lt;DTOcampanha&gt; daoSeaCampanha(DTOcampanha cam) throws SQLException {
		
		try {
			DTOcampanha dto =  new DTOcampanha();
			ArrayList&lt;DTOcampanha&gt; Lcampanhas = new ArrayList&lt;DTOcampanha&gt;() ;
			
			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!

QUERO SABER QUE PORRA É ESSA:

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

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

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

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?

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?

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&lt;DTOcampanha&gt; cam = new ArrayList&lt;DTOcampanha&gt;();
		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

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

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

puuuts!

ja estarei corrigindo!

esá faltando todos os BREAKS oO

xo ver aki galerão!

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

[quote=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[/quote]
Caraca meu velho, valeu demais cara, matou minha dúvida.
Muito obrigado mesmo.

VALEU GUJ, VOCÊS SÃO DEMAIS!