[Resolvido] try - catch

10 respostas
tathy.vip

Bom dia!
Tenho uma dúvida antiga a respeito de Try - Catch… já procurei no fórum e não consegui encontrar nada parecido.

Por que em alguns códigos que estão dando erro, se colocarmos o try - catch funciona?

Por exemplo, tenho o seguinte código em uma Servlet:

protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		Contato c = new Contato();
		c.setIdContato(Integer.parseInt(req.getParameter("idContato")));

		try {
			EmailDAO dao = new EmailDAO();
			List<Email> listaEmail = dao.getLista(c.getIdContato());

			HttpSession session = req.getSession();
			session.setAttribute("listaEmail", listaEmail);

			RequestDispatcher rd = req
					.getRequestDispatcher("detalhesContato.jsp");
			rd.forward(req, res);

		} catch (Exception e) {
			throw new ServletException(e);
		}
	}

Neste código eu armazeno uma List em uma Session, e pego o retorno dela na seguinte JSP:

<% List<Email> listaEmail = (List<Email>) session.getAttribute("listaContato");

		for (Email e: listaEmail){%>
		<%=e.getEmail() %>	

<%}%>

Desta forma, tenho o seguinte erro no JSP:

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /detalhesContato.jsp at line 17

14:

15: <% List listaEmail = ( List ) session.getAttribute(listaContato);

16:

17: 		for (Email e: listaEmail){%>

18: 		<%=e.getEmail() %>

19: 		<%}%>

20:

Mas quando eu coloco try - catch… a página roda, porém não consigo listar na tela os e-mails da lista.

Alguém pode me ajudar?!

10 Respostas

B

Verifique os imports das classes/interfaces utilizadas, ou seja, java.util.List e sua classe Email.

E verifique a versão do seu java. O foreach só funciona a partir da versão 1.5

nel

Bom dia.

Neste caso, você não precisa dar um throw new ServletExcpetion() já que você atribuiu essa Exception ao método, sendo assim, basta dar um throw e. O try-catch tem exatamente a função de efetuar um tratamento de erro, mas no seu caso se houver qualquer outro tipo de excessão, não estaria sendo tratada e possívelmente sua página exibiria o erro, correto?

O ideal de se trabalhar com try-catch não é somente para saber exatamente o tipo de erro ou a linha/método que ele ocorreu e sim o que você deseja fazer caso um erro ocorra. Exemplo, eu tenho um costume de quando faço select usando JPA e getSingleResult() de usar o NoResulException(). Mas ao invés de lançar a excessão, eu simplesmente retorno um null, indicando que ele select não encontrou ninguém, compreende?

Ou seja, como ocorreu um erro que está sendo tratado, sua página não o exibirá, mas perde uma determinada função. Por isso, procure usar Exception sempre e seus respectivos tratamentos, mas eu diria mais, quando usar uma Exception Específica, como no seu caso a do Servlet, procure usar junto com ela a generica, ou seja, a própria Exception.

Espero ter contribuido com algo.

Abraços!

tathy.vip

biro… já verifiquei os imports e a versão do Java… inclusive eu já utilizo o foreach em outras classes.

nel… muito obrigada pela sua resposta… entendi, agora alterei o servlet para:

package br.com.tathy.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.tathy.model.Contato;
import br.com.tathy.model.Email;
import br.com.tathy.model.EmailDAO;

public class DetalheContatoServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		Contato c = new Contato();
		c.setIdContato(Integer.parseInt(req.getParameter("idContato")));

		try {
			EmailDAO dao = new EmailDAO();
			List<Email> listaEmail = dao.getLista(c.getIdContato());

			HttpSession session = req.getSession();
			session.setAttribute("listaEmail", listaEmail);

			RequestDispatcher rd = req
					.getRequestDispatcher("detalhesContato.jsp");
			rd.forward(req, res);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

Mas ainda assim não funcionou… quando eu coloco o try - catch no jsp, funciona… assim:

<% List<Email> listaEmail = (List<Email>) session.getAttribute("listaContato");
	try{
		for (Email email: listaEmail){%>		
		<%=email.getEmail() %>
		<%}
	}catch(Exception e){
		e.printStackTrace();
	}%>

O problema é que eu preciso imprimir na tela… e estando dentro do try-catch eu não consigo!
Obrigada mesmo pela atenção!

pmlm

Convém que te decidas no nome que queres dar ao atributo…

tathy.vip

Puxa! Era isso mesmo!! Que erro mais bobo… às vezes a gente vê tanto código que se perde!

Obrigada mesmo!!!

Resolvido!!!

Beijooos =)

pmlm

Qual é a StackTrace que imprime?

tathy.vip

pmlm!

Era isso sim… obrigadíssimo!!

nel

Que bom que o seu problema foi resolvido. Na verdade, o que eu achei que tu queria era saber como/movito para usar try-catch.
Não me atentei ao erro que estava acontecendo. O mais importante é que seu problema foi resolvido.

Até! :slight_smile:

tathy.vip

nel,

Essa era uma das dúvidas (entre as inúmeras que eu ainda tenho em Java… rs)

Mas muito obrigada pela sua explicação!

Boa tarde!!
:slight_smile:

nel

De nada.

Fique á vontade para postar suas dúvidas. O mundo Java é realmente muito amplo, pode me colocar nesse círculo de dúvidas porque também tenho várias! rs.

Mas o pessoal aqui do GUJ é antecioso, seguindo as regras do fórum e postando corretamente as dúvidas e códigos, logo aparece alguém para sanar suas dúvidas.

Obrigado, boa tarde á você também.

Criado 27 de outubro de 2009
Ultima resposta 27 de out. de 2009
Respostas 10
Participantes 4