ola pessoal
eu tenho uma tela de cadastro, faco meu cadastro e funciona tudo bem,porem ,se o usuario mandar atualizar a pagina(F5) ele faz o cadastro de novo
meu ManagedBeam
bem, eu o que ocorre
eu cadastro a pessoa(this.pessoaFisicaDB.insert(this.pessoaFisica) retorno para o front-end o ID do cadastro(FacesUtils.addInfoMessage("Cadastro de Pessoa realizado com sucesso, código do cadastro: " + this.pessoaFisica.getId()) e limpo o formulario(this.pessoaFisicaDB.getPessoaFisica().setPessoaFisicaLimpa();).
isso ocorre perfeitamente, apos o cadastro, se tudo ocorrer bem, ele avisa o ID do cadastro e apaga todos os dados do formulario.
porem, mesmo sem nenhum dado no form, ele apertando o (F5) ele insere os dados novamente.
cara isso deve ser alguma coisa do IE, pois nas aplicações Struts ocorre a mesma coisa…
ainda não testei em alguma aplicação sem framework para ver se da a mesma coisa…
O que ocorre é normal, e não é problema especifico de browser ou framework. Quando você aperta F5 (refresh) depois de submeter um formulário pelo método POST a sua última requisição é enviada novamente, se você não colocar nenhuma restrição no seu sistema como verificar se o registro já não existe com certeza ele vai tentar inserir novamente no banco.
Existem diversas soluções para o problema, a mais comum seria o PRG,
Um solução de maneira simples seria submeter o formulário via AJAX (Ajax4jsf por exemplo), assim depois de um F5 não haveria a resubmissão do formulário.
[quote=rponte]O que ocorre é normal, e não é problema especifico de browser ou framework. Quando você aperta F5 (refresh) depois de submeter um formulário pelo método POST a sua última requisição é enviada novamente, se você não colocar nenhuma restrição no seu sistema como verificar se o registro já não existe com certeza ele vai tentar inserir novamente no banco.
Existem diversas soluções para o problema, a mais comum seria o PRG,
Um solução de maneira simples seria submeter o formulário via AJAX (Ajax4jsf por exemplo), assim depois de um F5 não haveria a resubmissão do formulário.
Abraços e boa sorte.[/quote]
no banco de dados existe a verificacao se ja existe ou nao o cadastro
porem, esse “problema” ocorre mesmo se os campos estiverem em branco
apos a confirmacao de cadastro, eu apago o valor de todos os campos, e mesmo com os campos em branco ele faz o cadastro com os valores antigos.
mudei no metodo de cadastro pra ele apagar os valores dos beans, mas, mesmo assim ocorre este problema
entao, tanto apagando no form com java script e na classe do bean ocorre este mesmo problema
É como nosso amigo rponte falou: é só vc fazer uma verificação na sua aplicação pra não inserir um registro no banco com o mesmo Id… enviando uma resposta ao usuário dizendo q o registro já existe no banco.
[quote=Krusst][quote=rponte]O que ocorre é normal, e não é problema especifico de browser ou framework. Quando você aperta F5 (refresh) depois de submeter um formulário pelo método POST a sua última requisição é enviada novamente, se você não colocar nenhuma restrição no seu sistema como verificar se o registro já não existe com certeza ele vai tentar inserir novamente no banco.
Existem diversas soluções para o problema, a mais comum seria o PRG,
Um solução de maneira simples seria submeter o formulário via AJAX (Ajax4jsf por exemplo), assim depois de um F5 não haveria a resubmissão do formulário.
Abraços e boa sorte.[/quote]
no banco de dados existe a verificacao se ja existe ou nao o cadastro
porem, esse “problema” ocorre mesmo se os campos estiverem em branco
apos a confirmacao de cadastro, eu apago o valor de todos os campos, e mesmo com os campos em branco ele faz o cadastro com os valores antigos.
mudei no metodo de cadastro pra ele apagar os valores dos beans, mas, mesmo assim ocorre este problema
entao, tanto apagando no form com java script e na classe do bean ocorre este mesmo problema
abs
obrigado a todos[/quote]
Oi, Krusst,
Como disse, depois que você tecla F5 (refresh) a sua última requisição é enviada novamente ao servidor, ou seja, mesmo que você seja encaminhado para uma página toltamente diferente depois de submeter um formulário ao teclar F5 nessa nova página a sua última requisição será enviada novamente ao servidor como se você tivesse submetido o mesmo formulário novamente.
[quote=rponte]O que ocorre é normal, e não é problema especifico de browser ou framework. Quando você aperta F5 (refresh) depois de submeter um formulário pelo método POST a sua última requisição é enviada novamente, se você não colocar nenhuma restrição no seu sistema como verificar se o registro já não existe com certeza ele vai tentar inserir novamente no banco.
Existem diversas soluções para o problema, a mais comum seria o PRG,
Um solução de maneira simples seria submeter o formulário via AJAX (Ajax4jsf por exemplo), assim depois de um F5 não haveria a resubmissão do formulário.
Abraços e boa sorte.[/quote]
Ola Rponte,
Eu tentei usar uns formularios na aplicacao enviando por ajax, porem quando ele mandava para pagina seguinte a mesma voltava sem nenhuma configuracao CSS e nenhum dos botoes executava as acoes. usei as tags <a4j:form> e <a4j:commandLink> e tambem <a4j:commandButton>. Como seria essa sua solucao por a4j?
Nao teria redirecionamento? ele simplesmente recarrega o formulario novamente?