Try/catch não funciona no jsp

8 respostas
C

Olá, bao tarde. Porque este código não está funcionando? aparece msg no browser de que "eventos cannot be resolved". Portanto é como se não executasse o bloco dentro do try, não é mesmo? Sem o try/catch funciona perfeitamente.

Grato, Carlos.

<%@ page import="java.util.*, java.sql.SQLException,  jdbc.*,dao.*,modelo.*" %>
<html>
<table border color="blue">
<%
try {
EventoDao dao = new EventoDao();
Evento eventos = new Evento();
eventos = dao.getListaUltimo();
}
catch (SQLException ex){%>
erro
<%
}
%>

<tr>
<td><IMG style="MARGIN: 0px 1ex" src="<%=eventos.getEvento0()%>.bmp" align=bottom></td>
<td><IMG style="MARGIN: 0px 1ex" src="<%=eventos.getEvento1()%>.bmp" align=bottom></td>
<td><IMG style="MARGIN: 0px 1ex" src="<%=eventos.getEvento2()%>.bmp" align=bottom></td>
<td><IMG style="MARGIN: 0px 1ex" src="<%=eventos.getEvento3()%>.bmp" align=bottom></td>
<td><IMG style="MARGIN: 0px 1ex" src="<%=eventos.getEvento4()%>.bmp" align=bottom></td>
<td>
</td>
</td>
</tr>
</table>
</html>

8 Respostas

T

Carlos,

Defina suas variáveis fora do try {}, deixando dentro dele apenas as instruções/chamdas que possam gerar Exceções. Esse erro aparece porque o compilador não garante que, estando em um bloco try, a variavel irá ser instanciada/declarada.

Um abraço

J

Como o TiD falowww
Essa variavel erro ( que esta no cath )nao esta apontando para lugar nenhum, faz um teste com um System.out.println() e coloca pra imprimir essa variavel erro. geralmente é mais facil usar o StackTrace mas como o usuário nao vai entender bulhufas é melhor criar uma mensagem própria de erro e lançar indicando qual é a Exception.

Abaixo um exemplo simples do que citei acima:

private String erro = "";

 try{
         // Seu código ....
 
     }catch(SQLException sql){
			erro = "Ocorreu um erro - MySQL";
			sql.printStackTrace();
			throw new SQLException(erro);
			
		}catch(Exception ex){
			erro = "Ocorreu um erro";
			ex.printStackTrace();
			throw new Exception(erro);
		}

Espero ter ajudado !!

Té+ :D

T

Ficaria assim:

&lt;%  
 EventoDao dao = new EventoDao();  
 Evento eventos = new Evento();  
 try {  
    eventos = dao.getListaUltimo();  
 }  
 catch (SQLException ex){%&gt;  
   erro  
 &lt;%  
 }  
 %&gt;
D

ou ainda…

<% EventoDao dao; Evento eventos; try { dao = new EventoDao(); eventos = new Evento(); eventos = dao.getListaUltimo(); } catch (SQLException ex){%> erro <% } %>

Daí se no construtor der uma exception já pega também. Porém, se no seu código der erro no construtor do ‘evento’, vai dar NullPointerException na hora de acessá-lo logo embaixo… fique atento!

P

Agora que já conhece a maneira de usar, retire toda esse codigo Java do JSP, use taglibs como JSTL :wink:

T

Nesse caso o compilador vai reclamar que a variável pode não ter sido instanciada, não ? (The local variable eventos may not have been initialized - em arquivos .java … no JSP ele vai reclamar dizendo o erro que o cara esta reclamando, eventos cannot be resolved).

Acho que o ideal seria fazer como eu disse e o tratamento de exceção diretamente no construtor da outra classe. É o mais correto, até porque se voce tiver que tratar a excecao do construtor em todo lugar que for instanciar a classe vai ficar realmente uma macarronada.

Abraços!

T

Disse tudo o Pedrosa :wink: ! Dê uma olhada nas Tag Libraries e voce vai fazer um codigo JSP muito mais limpo e de facil manutenção.

T

Pedrosa vc esta mais do que certo!!!

Criado 5 de maio de 2009
Ultima resposta 5 de mai. de 2009
Respostas 8
Participantes 6