Acredito que esse problema seja comum até.
Tem no meu sistema um cadastro, onde os usuários preenchem os campos e confirma, prosseguindo pra outra tela. Só que alguns infelizes estão usando o botão Voltar do browser e confirmando o cadastro anterior novamente. Então, tá duplicando registros!
Umas das saídas seria tirar os botões da barra de navegação, mas só consigo fazer isso sem popup no firefox.
Alguem já teve que resolver esse problema, ou alguem tem alguma solução?
Não posso dar reset. É que os dados da aba/tela anterior precisam ficar ali, pois a segunda tela depende dos dados da primeira e tenho que manter os dados sempre na tela. Só que o usuário não usa o botão voltar do formulário, e sim o botão Voltar do browser (history.back()).
G
Giulliano
Eu tive esse problema recentemente…a minha idáia era capturar o evento de clicar no voltar, mas isso é impossível.
Então eu achei duas solulções…uma é não permitir q o cara volte pra pagian anterioir colocando a tag
e outra solução é se vc estiver usando o Hibernate sempre chamar o update ao invés do save…pq o update veririfica se o cara existe e se não existir chama o save…se existir dá update…
[]'s
G
g4j
Olá Giulliano, obrigado pela resposta,
Giulliano:
Eu tive esse problema recentemente…a minha idáia era capturar o evento de clicar no voltar, mas isso é impossível.
Então eu achei duas solulções…uma é não permitir q o cara volte pra pagian anterioir colocando a tag
e outra solução é se vc estiver usando o Hibernate sempre chamar o update ao invés do save…pq o update veririfica se o cara existe e se não existir chama o save…se existir dá update…
[]'s
Ok, uso hibernate no sistema, mas quando o botão voltar é clicado, não existe o campo chave preenchido (hidden), portanto meu objeto fica sem a chave, sendo assim, tanto faz update ou save, correto?
D
dricorj
eu uso window.history.forward(1); e funciona no IE e no FF.
G
Giulliano
Cara eu não sei se a solução do history é cross browser…mas eu acredito que sim.
Esse tipo de erro requer “gambiarras práticas”…não tem jeito. Se seu campo chave não esta preenchido vc pode optar por fazer uma busca no banco pra ver se o registro existe (isso se vc tiver os valores)…
enfim, existem deiversas maneiras de resolver isso caso a caso…provavelmente nenhuma delas será elegante ou 100%.
G
g4j
Giulliano:
Cara eu não sei se a solução do history é cross browser…mas eu acredito que sim.
Esse tipo de erro requer “gambiarras práticas”…não tem jeito. Se seu campo chave não esta preenchido vc pode optar por fazer uma busca no banco pra ver se o registro existe (isso se vc tiver os valores)…
enfim, existem deiversas maneiras de resolver isso caso a caso…provavelmente nenhuma delas será elegante ou 100%.
É verdade. Ja pensei em fazer validação buscando no banco. Acredito que seja a forma que mais me agrada. Mas penso que isso pode se repetir em diversos locais do sistema, aí fica impraticável ficar fazendo esse tipo de verificação pra contornar.
Existem outras formas, inclusive ja vi sistemas que abrem um popup (window.open) tirando a barra de botões. Isso até minimiza o problema, mas não o resolve.
J
jgbt
Ola,
a melhor alternativa no lado cliente ainda é algo na linha do:
no lado servidor tem outras opções. Uma delas é o token, que impede o mesmo formulario de ser enviado 2x.
Quase todos frameworks web tem controle de tokens.
[]´s
G
g4j
jgbt:
Ola,
a melhor alternativa no lado cliente ainda é algo na linha do:
no lado servidor tem outras opções. Uma delas é o token, que impede o mesmo formulario de ser enviado 2x.
Quase todos frameworks web tem controle de tokens.