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!
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.
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.
[quote=“http://www.corej2eepatterns.com/Design/PresoDesign.htm”]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.[/quote]
E como eu poderia fazer pra que limpe os campos do formulário após serem incluídos?
Ps.: Utilizando JSF e RichFaces.
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…
Eu fazia isso com Richfaces usando modalPanel como popup para mensagens, tbm da pra fazer usando status e progress bar.
teria um exemplo pratico da sua solução?
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???
[quote=bbmany]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???[/quote]
Direcione para uma outra página assim qeu terminar o “processamento”.
[quote=Luiz Aguiar]
Direcione para uma outra página assim qeu terminar o “processamento”.[/quote]
Hum… É uma idéia boa que eu não tinha pensado.
Obrigada.
Obrigado pessoal! A discussão foi de grande ajuda!!!
[quote=Mantu]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![/quote]
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!