Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Tratar exception

Boa tarde Pessoal!

Gostaria de saber como tratar essa exception

HTTP Status 500 - br.com.caelum.vraptor.InterceptionException: br.com.caelum.vraptor.InterceptionException: br.com.caelum.vraptor.InterceptionException: javax.persistence.RollbackException: Error while committing the transaction

Essa exception é lançada quando tento excluir um registro que está vinculado a outra tabela, atá ai blz, faz seu papel não deixando excluir, porém eu gostaria de mostrar uma tela amigável para o usuário!

tentei fazer isso, mais ainda não obtive sucesso

    @Get
    public void remove(Produto produto) {


        try {
            dao.remove(produto);
        } catch (RollbackException  e) {
            result.include("mensagemErro", "Não Foi Possivel Remover o registro, pois a informação está vinculada a outro registro no Banco de dados!!!");

   result.redirectTo(this).lista(0);
        }
4 respostas

Olá Rafael,

quando você tentou fazer o redirect para a tela ele deu o mesmo erro? Pois uma das possibilidades é justamente no catch adicionar algo no result e depois redirecionar para alguma tela. Outra possibilidade seria trabalhar com o validator, adicionando uma mensagem de erro no catch e depois fazendo um validator.onErrorRedirectTo(this).lista(0). Neste link tem as referencias de como trabalhar com o validator.

Olá!

Tentei assim

@Get
    public void remove(@Valid Produto produto) {


        try {
            dao.remove(produto);
        } catch (RollbackException  e) {
            result.include("mensagemErro", "Não Foi Possivel Remover o registro, pois a informação está vinculada a outro registro no Banco de dados!!!");

            validator.onErrorRedirectTo(this).lista(0);
        }

    }

deu o seguinte erro

HTTP Status 500 - java.lang.IllegalStateException: There are validation errors and you forgot to specify where to go. Please add in your method something like:

type Exception report

message java.lang.IllegalStateException: There are validation errors and you forgot to specify where to go. Please add in your method something like:

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.IllegalStateException: There are validation errors and you forgot to specify where to go. Please add in your method something like: validator.onErrorUse(page()).of(AnyController.class).anyMethod(); or any view that you like. If you didn't add any validation error, it is possible that a conversion error had happened. br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:127) root cause

java.lang.IllegalStateException: There are validation errors and you forgot to specify where to go. Please add in your method something like: validator.onErrorUse(page()).of(AnyController.class).anyMethod();

já li vários tópicos e nada!

Olá Rafael,

olhando o código imagino que o problema na verdade não está no catch, o problema vem do @Valid no parâmetro. Como o método é de remove, chuto que a única informação que é enviada na requisição é o id do produto. Ou seja, todas as outras informações que provavelmente são obrigatórias de estarem preenchidas acabaram ficando inválidas. Só que em nenhum momento foi especificado para onde ele deve redirecionar com um validator.onErrorRedirectTo quando dá um problema de validação, dado que o unico redirect de erro está dentro do catch.

Para tentar resolver este problema você pode tirar o @Valid ou receber apenas o int id no lugar do Produto produto como parâmetro dado que é a única coisa que vem na requisição.

Outra coisa que reparei que vai dar errado é que se você for usar o validator.onErrorRedirectTo(this).lista(0), você precisa adicionar a mensagem de erro com o validator.add e não no result.include, pois o vraptor não reconhece coisas colocadas no include como erros. Ai neste link mostra bonitinho como trabalhar com o validator.add.

solução!

Boa tarde! Tentei resolver, mais s'o encontrei a solução neste fórum

https://groups.google.com/forum/#!topic/caelum-vraptor/inHj_jx6ikQ

Grato pela atenção

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software