| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 13:04:35
|
Felipe Moraes
Thread.start()
Membro desde: 02/02/2009 10:22:44
Mensagens: 34
Offline
|
Boa Tarde gente,
Fiz um cadatros simples de Usuarios no JSF 2.
Depois de testar um pouco, vi que depois que eu cadastro um usuario novo se eu atualizar a pagina aparece aquela janela que pede para reenviar os dados e assim acaba duplicando meu usuario na base...
Vocês podem me falar um jeito de contornar essa situação?
Valeuu...Abraços
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 14:42:54
|
Ace
Java Ninja
![[Avatar]](/images/avatar/177a49b01a5ad9d3d03883ad18fea943.png)
Membro desde: 23/04/2009 22:00:35
Mensagens: 256
Offline
|
Fala, Felipe Moraes
Faça uma requisição via ajax, assim vc resolve este problema..!
vlw
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 14:50:44
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Felipe Moraes wrote:Boa Tarde gente,
Fiz um cadatros simples de Usuarios no JSF 2.
Depois de testar um pouco, vi que depois que eu cadastro um usuario novo se eu atualizar a pagina aparece aquela janela que pede para reenviar os dados e assim acaba duplicando meu usuario na base...
Vocês podem me falar um jeito de contornar essa situação?
Valeuu...Abraços
Normal amigo..."atualizar a pagina" para o navegador nada mais é que enviar o mesmo pedido anterior enviado!! Se o ultimo foi um cadastro, transação bancaria...JA ERA!!
bem vindo a WEB! kkkkk
Para contornar isso em processos transacionais use o pattern velho de guerra - SINCRONIZED TOKEN
http://www.refactoring.com/catalog/introduceSynchronizerToken.html
http://www.javaworld.com/javaworld/javatips/jw-javatip136.html
This message was edited 1 time. Last update was at 13/09/2011 14:52:51
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 15:25:34
|
Felipe Moraes
Thread.start()
Membro desde: 02/02/2009 10:22:44
Mensagens: 34
Offline
|
FernandoFranzini wrote:
Felipe Moraes wrote:Boa Tarde gente,
Fiz um cadatros simples de Usuarios no JSF 2.
Depois de testar um pouco, vi que depois que eu cadastro um usuario novo se eu atualizar a pagina aparece aquela janela que pede para reenviar os dados e assim acaba duplicando meu usuario na base...
Vocês podem me falar um jeito de contornar essa situação?
Valeuu...Abraços
Normal amigo..."atualizar a pagina" para o navegador nada mais é que enviar o mesmo pedido anterior enviado!! Se o ultimo foi um cadastro, transação bancaria...JA ERA!!
bem vindo a WEB! kkkkk
Para contornar isso em processos transacionais use o pattern velho de guerra - SINCRONIZED TOKEN
http://www.refactoring.com/catalog/introduceSynchronizerToken.html
http://www.javaworld.com/javaworld/javatips/jw-javatip136.html
Fernando, eu li os links que você mandou e dei uma pesquisada também e vi que o JSF 2 implementa já esse pattern...você sabe como eu faço para usar ele...ou eu realmente preciso implementar ele?
valeu
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 15:28:04
|
Felipe Moraes
Thread.start()
Membro desde: 02/02/2009 10:22:44
Mensagens: 34
Offline
|
Ace wrote:Fala, Felipe Moraes
Faça uma requisição via ajax, assim vc resolve este problema..!
vlw
Ace, eu testei como você falou...e realmente resolve...só que eu acho que não é o jeito mais certo de tratar do problema...vou ver se consigo usando o synchronizer pattern como o FernandoFranzini falou...
Vlw
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 15:32:10
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Ace wrote:Fala, Felipe Moraes
Faça uma requisição via ajax, assim vc resolve este problema..!
vlw
O Ajax foi feito para fazer interações assíncronas com o servidor...se seu caso couber dentro do contexto do AJAX...resolve sim...pq o navegador não armazena as chamadas AJAX...mas se seu processo não tem AJAX não vai ser isso q justificara o uso !
Usar AJAX em processos q não precisa de chamada assíncronas pode gerar outros complicadores aia no sistema.
This message was edited 1 time. Last update was at 13/09/2011 15:33:20
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 15:32:26
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Aonde vc leu que JSF já faz isso? Acho que não.....
This message was edited 1 time. Last update was at 13/09/2011 15:33:58
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 15:42:31
|
Felipe Moraes
Thread.start()
Membro desde: 02/02/2009 10:22:44
Mensagens: 34
Offline
|
FernandoFranzini wrote:Aonde vc leu que JSF já faz isso? Acho que não.....
Realmente Fernando, eu li errado...eu li que ele suporta...mas não diz que é nativo...erro meu...foi mal
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 15:55:08
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Pois é...seria é uma boa se tivesse especificação para isso...mas ainda não!
Bom, partindo do que os managed beans podem ficar na sessão, usar syncronized token é facil...vc pode usar String, Boolean ou até um objeto especifico para controlar isso....
Vc tem alguma duvida de como fazer?
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 16:03:35
|
Felipe Moraes
Thread.start()
Membro desde: 02/02/2009 10:22:44
Mensagens: 34
Offline
|
FernandoFranzini wrote:Pois é...seria é uma boa se tivesse especificação para isso...mas ainda não!
Bom, partindo do que os managed beans podem ficar na sessão, usar syncronized token é facil...vc pode usar String, Boolean ou até um objeto especifico para controlar isso....
Vc tem alguma duvida de como fazer?
Pra falar a verdade tenho...rsrs
eu até procurei algum exemplo na internet...mas todos usavam JSF 1 que eu não entendo nada...eu tava querendo alguma coisa mais simples...
você poderia me passar um exemplo???
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 16:09:26
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Estamos aqui para ajudar felipe...não se acanhe kkkkk
A coisa é bem simples....
1)Antes de vc entrar na tela de cadastro ai, vc atribui true para um boolean....tipo dentro action da chamada do menu que antecede o processo, ou na GUI anterior.
2)Quando o usuário gravar o registro...vc verifica a variável é true dentro de if...se for ele pode gravar...
3)Depois de gravar, vc atribuí false para essa boolean ai.
4)Caso o usuário duplique o request...vai estar false na variável e o código vai se desviado...com isso vc pode enviar uma mensagem de erro para o usuario ou tomar suas devidas medidas de acordo com a filosofia do seu sistema.
OBS - managed bean tem que estar na sessão.
This message was edited 2 times. Last update was at 13/09/2011 16:10:29
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/09/2011 16:19:15
|
Felipe Moraes
Thread.start()
Membro desde: 02/02/2009 10:22:44
Mensagens: 34
Offline
|
FernandoFranzini wrote:Estamos aqui para ajudar felipe...não se acanhe kkkkk
A coisa é bem simples....
1)Antes de vc entrar na tela de cadastro ai, vc atribui true para um boolean....tipo dentro action da chamada do menu que antecede o processo, ou na GUI anterior.
2)Quando o usuário gravar o registro...vc verifica a variável é true dentro de if...se for ele pode gravar...
3)Depois de gravar, vc atribuí false para essa boolean ai.
4)Caso o usuário duplique o request...vai estar false na variável e o código vai se desviado...com isso vc pode enviar uma mensagem de erro para o usuario ou tomar suas devidas medidas de acordo com a filosofia do seu sistema.
OBS - managed bean tem que estar na sessão.
Vamos por partes então...por enquanto, minha aplicação só tem a tela de cadastro...então eu teria que colocar um filtro para setar uma variavel com um boolean na seção?
e depois no managed bean recuperar esse boolean e na hora de adicionar...eu checaria se a variavel era true e adicionava?...é isso??
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 07:09:12
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Vamos por partes então...por enquanto, minha aplicação só tem a tela de cadastro...então eu teria que colocar um filtro para setar uma variavel com um boolean na seção?
Sim....mas fazer um filtro só para isso é pura bobeira....na verdade vc tem que setar true quando o usuario entrar no cadastro!!! Normalmente via menu....
e depois no managed bean recuperar esse boolean e na hora de adicionar...eu checaria se a variável era true e adicionava?...é isso??
A variável boolean deve ESTAR no managed bean que ele tb deve estar na sessão.
Outra coisa que eu esqueci...o método da action do managed bean deve ser sinchronized evitando múltiplos http request entrar ao mesmo tempo....
E por ai vai....
This message was edited 1 time. Last update was at 14/09/2011 07:13:52
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 09:16:39
|
Felipe Moraes
Thread.start()
Membro desde: 02/02/2009 10:22:44
Mensagens: 34
Offline
|
FernandoFranzini wrote:Vamos por partes então...por enquanto, minha aplicação só tem a tela de cadastro...então eu teria que colocar um filtro para setar uma variavel com um boolean na seção?
Sim....mas fazer um filtro só para isso é pura bobeira....na verdade vc tem que setar true quando o usuario entrar no cadastro!!! Normalmente via menu....
Não entendi essa parte...por exemplo logo que o usuario acessar a tela de cadastro, o ManagedBean de cadastro vai ser instanciado certo?...então eu colocaria
dentro do construtor do Managed Bean???
e como assim via menu???
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 09:23:53
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Construtir nãoooooo!! Dai o pattern nao funciona!
vc vai atribuir TRUE nela quando o usuário indicar que esta entrando para fazer a operação gravar!! Normalmente é de um menu!
pensa assim...como sua aplicação vai saber que é para mostrar a tela de cadastro?
Quando o usuario click no menu "CADASTRO TAL"...dai vc faz um action
This message was edited 1 time. Last update was at 14/09/2011 09:24:37
|
Fernando Franzini |
|
|
 |
|
|