[Vraptor] Exception Handler: Como recuperar exception? "javax.servlet.error.exception"?

2 respostas
J

Opa,
Uso o vraptor à algum tempo, me interessei pela feature de Exception Handler do Vraptor(http://vraptor.caelum.com.br/documentacao/exception-handling/).
Quando você usa:

result.on(MinhaException.class).redirectTo(C).metodoDeTratamentoQualquer();

Você esta informando ao vraptor que se a exceção “MinhaException” for lançada, que o fluxo seja redirecionado para o controlador “C” e invocado o método “metodoDeTratamentoQualquer” correto?

Minha dúvida é: Como que eu acesso a exception lançado no método/view de tratamento informado?

Eu abri o codigo fonte do interceptor e percebi que ele registrar algumas variáveis na response do servelet(?).

...
// add error attributes compliance with servlet spec
result.include("javax.servlet.error.status_code", 500);
result.include("javax.servlet.error.exception", rootCause);
result.include("javax.servlet.error.exception_type", rootCause.getClass());
result.include("javax.servlet.error.message", rootCause.getMessage());
result.include("javax.servlet.error.request_uri", request.getRequestURI());
...

Então eu consegui tratar a exception no método de tratamento utlizando.

result.included().get("javax.servlet.error.exception")

É assim que devo fazer?
obrigado.

2 Respostas

G

Essa feature foi feita para que tivesse comportamento igual ao servlets/jsp quando uma exception é lançada.

Caso você queira exibir o erro na view, você pode fazer algo assim:

${requestScope['javax.servlet.error.exception']} // aqui pega a exception ${requestScope['javax.servlet.error.exception_type']} // aqui retorna a classe da exception, mesma coisa que Exception.getClass() ${requestScope['javax.servlet.error.message']} // aqui retorna a mensagem, mesma coisa que Exception.getMessage() ${requestScope['javax.servlet.error.request_uri']} // aqui retorna o URI que causou o erro

J

Opa vlw padô!

Você tem algum link sobre “o comportamento igual ao servlets/jsp quando uma exception é lançada”.

Você que é o @author Otávio Scherer Garcia??

Aproveitando o ensejo, eu estou pensando em utilizar os listener do JPA para monitorar algumas regras de negócio nesse meu projeto, você acha correto utilizar essa feature do Vraptor para capturar e tratar essa exception?

Criado 18 de outubro de 2011
Ultima resposta 18 de out. de 2011
Respostas 2
Participantes 2