Personalizar mensagem de erro de violação de integridade
11/10/2016 10:41
1
Bom dia pessoal, implementei um cadastro simples com duas tabelas(ou domínios), "usuario" e "perfil", e fiz os relacionamentos entre elas, quando tentamos excluir um perfil que tenha usuários cadastrados, por padrão, o grails exibe um erro 500, informando que devido a existência de usuários cadastrados no perfil não é possível excluí-lo, como poderia personalizar essa mensagem para algo mais compreensível ao usuário do sistema, ao invés de exibir o padrão que é essa abaixo?

URI:/perfil/delete/2
Class: org.postgresql.util.PSQLException
ERROR: update or delete on table "perfil" violates foreign key constraint "fk_h0pukayiqlh9uvcviu796djtk" on table "usuario" Detalhe: Key (id)=(2) is still referenced from table "usuario".


Vlw moçada!
Tags: Grails, mensagem, integridade, erro, 500


0
Oi Francisco,

a mensagem do erro propriamente dito você pode modificar nos arquivos de internacionalização do Grails. É de lá que ele pega as mensagens a serem expostas.

Sobre a página, você vai ter de modificar o código fonte do seu controlador, para fazer um redirecionamento para alguma outra action ou view de acordo com a sua regra de negócio.

É possível customizar suas páginas de erro: por exemplo 500, 400, etc. Para tal, basta gerar os arquivos tais como "[código do erro]".gsp na raíz da pasta views.


0
Olá Kico, obrigado pelo retorno, sobre os arquivos de internacionalização e a personalização da página 500 tá tranquilo, queria saber como faria para controlar isso para ao invés de ir para a página 500, por exemplo, só disparar um flash.message informando o porquê determinado cadastro não poderia ser excluído, acho que poderia nesse exemplo, pelo controlador, contar se existe algum cadastro em tal perfil no momento do "delete" e caso positivo dar um redirect com esse flash.message e verificar se dá certo.
11/10/2016 16:32


0
Oi Francisco,

é razoávelmente simples, basta melhorar a lógica do controlador. Por exemplo:


def suaAction() {
      try {
            operacaoQuePodeDispararErro()
            redirect(controller:'teste'); // ou render
     } catch (Throwable t) {
          // executa o tratamento de erros aqui
         flash.message = "Sua mensagem informando"
         redirect(controller:'teste2'); // ou render
     }
}


0
Na verdade isso deverá ser implementado/modificado na action "delete" padrão do controlador, vou fazer esses testes, obrigado Kico!
13/10/2016 09:26


0
Qualquer coisa é só chamar!



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto