Como evitar que o usuário saia da tela sem confirmar alterações?

8 respostas
bonfarj

Estou desenvolvendo um sistema (Struts + Hibernate) onde as modificações de uma entidade só fazem sentido quando feitas em conjunto. Todas as mudanças na entidade são armazenadas na sessão (HttpSession), sendo persistidas apenas quando o usuário clica no botão “Salvar”. O problema é que muitas vezes o usuário esquece disso e acaba saindo da tela sem apertar o botão e com isso as alterações são perdidas.

Já reparei que alguns sites cuidam disso, detectando quando o usuário tenta entrar em alguma outra tela, digita algum endereço no browser ou tenta fechá-lo. Alguém sabe como isso é feito?

abraços!

8 Respostas

Pedrosa

Coloque uma função no body no evento onUnload, quando o usuário tentar fechar você valida do jeito que quiser:

<body onUnload="fechar();">

function fechar(){
..
}
M

Cara, pelo que eu entendi isso é um evento que tratamos em javascript

e por ai vai!

[]

maquiavelbona

Vale lembrar que isso nem sempre funciona, depende do browser e do nível de segurança do mesmo.
Parte dos sites maliciosos usam esse artifício, que alguns browsers já retiram por padrão.

Até!

danieldestro

Já que guarda os dados na sessão e vc não deseja problemas com Javascript, crie um Servlet Filter, que verifica se existe uma edição de dados em andamento (via uma flag na sessão), e que ele mesmo valida se você foi pra outra página sem salvar o conteúdo, redirecionando para uma tela com os dados e a confirmação das alterações.

É uma idéia.

C

Acho que o mais fácil é escrever no cantinho da página q as alteracoes só serao persistidas caso ele clique em salvar :smiley:

danieldestro

Mais fácil para o desenvolvedor ou para o usuário?

Mas quem paga o salário do desenv? heheheehhe

bonfarj

Eu não conhecia esse evento “onunload”, muito interessante! Mas ele não resolve o problema, pois ele permite que o usuário mude de tela, o evento é disparado após a mudança.

O que eu gostaria de fazer é parecido com o que o Gmail faz. Quando um usuário começa a escrever um e-mail e clica em algum outro link, o sistema avisa que sua mensagem ainda não foi e se você deseja descartá-la. Como ele faz isso?

valeu pessoal, obrigado pela atenção!! :slight_smile:

bonfarj

Resolvido, pessoal! Alguns browsers possuem o evento onbeforeunload, que possibilita “cortar” o fluxo, mantendo o usuário na página atual! Meu amigo falou que o Firefox suporta desde a 0.9 e o IE tb há tempos. Como são os browsers que dominam o mercado, vou dar como suficiente.

PS: o jeito que o Google faz me pareceu sutiltmente diferente, se alguém souber algo a respeito não deixe de nos contar! :smiley:

grande abraço, pessoal!!

Criado 25 de junho de 2007
Ultima resposta 27 de jun. de 2007
Respostas 8
Participantes 6