Mensagem do DAO para página JSP

8 respostas
leonardocoutoc

Bom dia pessoal,

Estou precisando enviar mensagens de erros (e.getMessage) geradas na classe DAO para a página JSP que chamou esse metodo do DAO. Vi que poderia fazer isso setando uma session e passar a string do erro ou posso fazer de outra forma criando uma classe "minhasException" tratar e enviar o erro de SQL para a página JSP, para que seja exibido no browser. Qual seria a melhor maneira e como implementaria esse esquema?

CLASSE DAO

	public boolean criarConta(ContaCorrente conta) throws SQLException {
		
		boolean resultCriarConta = false;
		String sqlCriarConta = "INSERT INTO contacorrente(CodContaCorrente, CodBanco, CodUsuario," + 
								"NumConta, DataAbertura, SaldoConta) VALUES (?,?,?,?,?,?)";
		Connection conn = DriverManager.getConnection(urlBD,userBD, senhaBD);
		PreparedStatement stmt = conn.prepareStatement(sqlCriarConta);
		conn.setAutoCommit(false);
		
		try{
			stmt.setString(1, conta.getNumConta());
			stmt.setString(2, conta.getBanco().getCodigoBanco());
			stmt.setString(3, conta.getDonoDaConta().getIdDoUsuario());
			stmt.setString(4, conta.getNumConta());
			stmt.setDate(5, conta.getDataAbertura());
			stmt.setFloat(6, conta.getSaldo());
			stmt.execute();
			conn.commit();
			resultCriarConta = true;
			
			
		}
		catch(SQLException e){
			conn.rollback();
			e.printStackTrace();
                        e.getMessage();
						
		}
		finally{
			stmt.close();
			conn.close();
		}
		return resultCriarConta;
	}
PARTE DA PAGINA.JSP

        <% 	
		boolean r = JdbcContaCorrenteDAO.getInstanceContaCorrenteDAO().criarConta(objContaC_Cadastro);
		
	%>
	<c:set var="result" value="<%=r%>"/>
	<c:if test="${result == false}">
		<c:set var="aviso" value="*Não foi possivel criar a conta corrente"></c:set> //PRECISO COLOCAR NESSA LINHA O E.getMessage();
		<c:redirect url="cadastraContaC.jsp?aviso=${aviso}"/>
	</c:if>

Desde já agradeço a ajuda,

8 Respostas

doug

Olá
Poderia fazer o seguinte, lança throws até a action e crio um filtro de requisição .do ou jsp, dependendo do framework que vc usar.
Mas o filtro vc faz o tratamento com um try catch, e seta a exception no request ou na sessão…
dai vc pode fazer qq coisa…

Bom eu faria isso… lança throws e criava uma classe de filtro e outra de tratamento de exception.

FLwss
Espero ter ajudado

leonardocoutoc

Thiago / forum,

Na verdade nunca trabalhei com filtros não sei como funciona :frowning: , mas tem uma solução que achei interessante que foi a do criar uma classe minha de Exception ou colocar a mensagem de erro na session. Vc saberia como eu poderia fazer em alguma dessas duas formas?

vlw!!!
Leonardo Couto.

leonardocoutoc

Boa tarde galera!!!

E ae rapeza alguem tem alguma ajuda sobre o topico acima?

Desde já agradeço,

Leonardo Couto.

andrepestana

Bom como ví que vc tá usando JSTL vc poderia usar a tag c:catch:

&lt;c:catch var="err"&gt;
     &lt;% Object n = null;
   		n.toString();
   %&gt;
&lt;/c:catch&gt;
&lt;c:if test="${not empty err}"&gt;
    Error: ${ err }
&lt;/c:if&gt;
Giulliano

Olha…vc poderia fazer o seguinte…

vc deve ter uma servlet e essa servelt chama essa classe ou esse método que lança a exceção…

então vc só precisa por o e.getMessage(); no request.

request.setAttribute("aviso",e.getMessage());

E NO SEU JSP

&lt;h3&gt; ${aviso} &lt;/h3&gt; //por exemplo

Agora falando de sistemas…existem várias razões para não se fazer isso. DAO é um componente do seu sistema que trata UNICAMENTE da comunicação JAVA x BANCO DE DADOS. Ele não deve conhecer a sua interface (seja ela WEB ou DeskTop ou Mobile).

Seria legal se vc tivesse por exemplo :

JSP &gt;&gt; SERVLETS &gt;&gt; BO (ou alguma outra classe de negócios) &gt;&gt; DAO 

DAO &gt;&gt; (lança exceção pro BO) BO (trata essa exceção e dá uma mensagem mais amiag pro usuário) &gt;&gt; SERVLET (Recebe um erro do BO) &gt;&gt; JSP (mostra a mensagem).

valew…[]'s

leonardocoutoc

andrepestana,

O <c:catch> não funcionou acho que é pq não estou utilizando jsp:usebean para chamar o metodo do objeto criarConta do DAO, tb nem tem como utilizar o usebean para intanciar o objeto pois o DAO n está no padrão bean. Eu acho que foi por isso que o <c:catch> não capturou o erro.

att,

Leonardo Couto.

andrepestana

A forma que vc está desenvolvendo seu sistema não está legal. Pq não usa algum framework como Struts ou vRaptor? Ficaria muito mais corriqueiro fazer o que vc quer.

Pense como vai ficar a manutenção do seu sistema desenvolvendo tudo na JSP.

leonardocoutoc

andrepestana,

Verdade na verdade é só para laboratorio estou aprendendo ainda Java no curso ai é só por questões academicas mesmo, proximo modulo irei aprender struts e hibernate. Sim consegui colocar para captura o erro usando o <c:catch> o problema tava no meu DAO pois tava lançando coom o Throws SQLException mas tinha o catch(SQLException) também tirei o catch e consegui capturar no JSP. Valeu pela ajuda.

att,

Leonardo Couto.

Criado 24 de dezembro de 2008
Ultima resposta 29 de dez. de 2008
Respostas 8
Participantes 4