JSF: Como evitar que o cliente submeta o formulário mais de uma vez?  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
Mantu
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline

Olá, pessoal!
Sabem quando temos aquele cliente chato, impaciente, que clica em um botão e antes de ser renderizada a próxima tela (ou a mesma tela ser re-renderizada) ele vai e clica novamente no botão? Pois é... qual a melhor estratégia para evitar problemas com esse tipo de comportamento? Uso javascript? Trato de alguma forma no server-side? Como?
Valeu pessoal!

[]'s
Mantu

"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.

[Email] [MSN] [ICQ]
febeckers
Virtual Machine Man

Membro desde: 23/01/2007 16:12:50
Mensagens: 588
Localização: Curitiba - PR
Offline

Cara uma maneira bem facil e simples que voce poderia usar seria atraves de ajax mostrar pro teu usuario que voce esta processando a pagina e desabilitar o input que grava.

Abraços

Site http://www.fernandobecker.com.br
Resumo de novela
[Email] [WWW] [MSN]
Ataxexe
JavaEvangelist
[Avatar]

Membro desde: 11/10/2007 15:34:17
Mensagens: 418
Localização: Brasília
Offline

A melhor forma, na minha opinião, é com o uso de um Synchronizer Token.

Dependendo do framework web que você esteja usando, ele pode ter implementado já isso. O Struts implementa ele e, se não me engano, o JSF também.

http://www.corej2eepatterns.com/Design/PresoDesign.htm wrote:Synchronizer (or Déjà vu) Token

This strategy addresses the problem of duplicate form submissions. A synchronizer token is set in a user's session and included with each form returned to the client. When that form is submitted, the synchronizer token in the form is compared to the synchronizer token in the session. The tokens should match the first time the form is submitted. If the tokens do not match, then the form submission may be disallowed and an error returned to the user. Token mismatch may occur when the user submits a form, then clicks the Back button in the browser and attempts to resubmit the same form.

On the other hand, if the two token values match, then we are confident that the flow of control is exactly as expected. At this point, the token value in the session is modified to a new value and the form submission is accepted.

You may also use this strategy to control direct browser access to certain pages, as described in the sections on resource guards. For example, assume a user bookmarks page A of an application, where page A should only be accessed from page B and C. When the user selects page A via the bookmark, the page is accessed out of order and the synchronizer token will be in an unsynchronized state, or it may not exist at all. Either way, the access can be disallowed if desired.

Marcelo Guimarães

https://github.com/ataxexe
http://sourceforge.net/projects/trugger
http://www.youtube.com/user/ataxexe
http://www.flickr.com/photos/ataxexe
bbmany
JavaTeenager
[Avatar]

Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline

E como eu poderia fazer pra que limpe os campos do formulário após serem incluídos?
Ps.: Utilizando JSF e RichFaces.

- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.

monteirobrena.wordpress.com

Twitter
[WWW]
antoniopopete
Virtual Machine Man

Membro desde: 27/12/2006 02:37:31
Mensagens: 712
Localização: Salvador - BA
Offline

Porque não usa aquelas telas modal.Que parecem popups interno enquanto está processando?
Já vi isso em alguns lugares e como o colega acima citou, eles usam ajax.
[url=http://extjs.com/deploy/dev/examples/message-box/msg-box.html]Exemplo[/]
Mas cuidado com essa api javascript tem pegadinha la licença dela, apenas te passei o link para te mostrar do que estou falando...
O exemplo que queria mostrar é wait dialog...

Antonio Lazaro

[Email]
Luiz Aguiar
Moderador
[Avatar]

Membro desde: 23/01/2005 00:05:55
Mensagens: 3840
Localização: São Paulo
Offline

Eu fazia isso com Richfaces usando modalPanel como popup para mensagens, tbm da pra fazer usando status e progress bar.

-
Blog de Tecnologia
GitHub
@AguiarLuiz
Recicla SP na App Store!




[WWW] [MSN] [ICQ]
robson_vs
JavaEvangelist

Membro desde: 26/05/2006 14:27:44
Mensagens: 334
Localização: São Paulo
Offline

febeckers wrote:Cara uma maneira bem facil e simples que voce poderia usar seria atraves de ajax mostrar pro teu usuario que voce esta processando a pagina e desabilitar o input que grava.


teria um exemplo pratico da sua solução?
[Yahoo!] [MSN]
bbmany
JavaTeenager
[Avatar]

Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline

Mesmo com a tela informando que está sendo salvo e/ou a barra de progresso, quando voltar para a tela do formulário os campos continuam preenchidos???

Se continuarem o usuário poderá pedir pra cadastrar novamente ai na validação/verificação não deve ser permitido o cadastro de um mesmo CPF, por exemplo.

Para diminuir a ocorrência da validação/verificação seria melhor limpar estes campos???

- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.

monteirobrena.wordpress.com

Twitter
[WWW]
rdgc
JavaGuru

Membro desde: 09/05/2006 17:34:17
Mensagens: 209
Localização: São Paulo - SP
Offline

Mantu wrote:Olá, pessoal!
Sabem quando temos aquele cliente chato, impaciente, que clica em um botão e antes de ser renderizada a próxima tela (ou a mesma tela ser re-renderizada) ele vai e clica novamente no botão? Pois é... qual a melhor estratégia para evitar problemas com esse tipo de comportamento? Uso javascript? Trato de alguma forma no server-side? Como?
Valeu pessoal!


Use o requestDelay="XXX" (Ex: XXX = 500) do componente ou se estiver usando Ajax4JSF o requestDelay="XXX" no a4j:support

Veja se resolve seu problema...

flw!
[MSN] [ICQ]
Luiz Aguiar
Moderador
[Avatar]

Membro desde: 23/01/2005 00:05:55
Mensagens: 3840
Localização: São Paulo
Offline

bbmany wrote:Mesmo com a tela informando que está sendo salvo e/ou a barra de progresso, quando voltar para a tela do formulário os campos continuam preenchidos???

Se continuarem o usuário poderá pedir pra cadastrar novamente ai na validação/verificação não deve ser permitido o cadastro de um mesmo CPF, por exemplo.

Para diminuir a ocorrência da validação/verificação seria melhor limpar estes campos???

Direcione para uma outra página assim qeu terminar o "processamento".

-
Blog de Tecnologia
GitHub
@AguiarLuiz
Recicla SP na App Store!




[WWW] [MSN] [ICQ]
bbmany
JavaTeenager
[Avatar]

Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline

Luiz Aguiar wrote:
Direcione para uma outra página assim qeu terminar o "processamento".

Hum... É uma idéia boa que eu não tinha pensado.
Obrigada.

- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.

monteirobrena.wordpress.com

Twitter
[WWW]
Mantu
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline

Obrigado pessoal! A discussão foi de grande ajuda!!!

[]'s
Mantu

"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.

[Email] [MSN] [ICQ]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team