Como evitar que o usuário saia da tela sem confirmar alterações?  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

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!

IGOR BRITO ALVES
@igoralves
Pedrosa
JWizard
[Avatar]

Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline

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

marcelux
Debugger

Membro desde: 25/06/2007 12:29:10
Mensagens: 62
Offline

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

<body onunload="confirm('deseja sair da tela?')">

e por ai vai!

[]

scjp, scwcd, scbcd

Marcelo Sousa Lima
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

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é!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

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.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
carneiro
JavaEvangelist
[Avatar]

Membro desde: 07/04/2005 11:37:42
Mensagens: 328
Offline

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

Davi Luan Carneiro
Desenvolvedor JEE
[Email] [MSN]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

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

Mas quem paga o salário do desenv? heheheehhe

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

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!!

IGOR BRITO ALVES
@igoralves
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

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!

grande abraço, pessoal!!

IGOR BRITO ALVES
@igoralves
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team